質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
if

if文とは様々なプログラミング言語で使用される制御構文の一種であり、条件によって処理の流れを制御します。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

3回答

4664閲覧

キーボードで文字を入力し 、ファイルに保存するプログラムを作成せよ。

yuto8228

総合スコア12

if

if文とは様々なプログラミング言語で使用される制御構文の一種であり、条件によって処理の流れを制御します。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2016/11/21 07:42

編集2016/11/22 10:22

番号と氏名をキーボードから入力し
、ファイルに保存するプログラムを作成せよ。
条件1:番号と名前の2行に分けて保存
条件2:入力された番号が10桁ではない場合は、エラーを出すこと。
条件3:番号は数字のみ、名前は英字のみが入力される

がわかりません。
特に、エラーの出し方と条件3で表記したことを教えていただけないですか?

★追記★

#include <stdio.h>

int main(void){
FILE *fp;
char str[256];

fp=fopen("gakuseki.txt","w"); int gaku; int name; printf("学籍番号を入力してください。\n"); scanf("%d",&gaku); if("1000000000>gaku&&gaku>1000000000"){ printf("氏名を英語で入力してください。\n"); scanf("%d",&name); }else{ printf("桁数が正しくありません。\n"); return -1; } scanf("%s",str); fprintf(fp,"%s",str); fclose(fp); return 0;

}

ここまでは、なんとなく出来たんですが…
ifで桁を指定しているのに、elseへ飛んでくれません…
何かが足りないですか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

if("1000000000>gaku&&gaku>1000000000")

なんでクオートで囲ってるんでしょ?
else節に飛んでいかないのはコレが原因。

投稿2016/11/22 10:25

episteme

総合スコア16614

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yuto8228

2016/11/22 10:36

回答ありがとうございます! elseには飛ぶようになりましたが、全部飛んでしまいます... お手数ですが、助言を願います。
episteme

2016/11/22 11:07 編集

修正は"クオートを外しただけ"ですか? 「5ケタ以上ならエラー」に変更したら、うまく動作しますか? 多分ダメでしょね、 10000>gaku && gaku>10000 は 「gakuが一万より小さく、かつ一万より大きい」ですよね、成立するワケないですね。
yuto8228

2016/11/23 05:44

&&じゃなくてllですね! 有り難うございます!
guest

0

ベストアンサー

こんにちは。

「エラーの出し方」はエラーメッセージを表示して、終了すれば良いと思います。
条件2と条件3の番号に関するエラーチェックのみサンプルを作ってみました。
(このリンク先のサイト便利ですよ。色々試してみて下さい。)

C++

1#include <iostream> // std::cout 2#include <string> // std::string 3 4int main () 5{ 6 std::string number; 7 std::cin >> number; 8 if (number.size() != 10) 9 { 10 std::cout << "lenght of number is not 10.\n"; 11 return 1; 12 } 13 14 std::size_t found = number.find_first_not_of("0123456789"); 15 if (found!=std::string::npos) 16 { 17 std::cout << "included no decimal charactor.\n"; 18 return 1; 19 } 20 21 std::cout << "OK : " << number << "\n"; 22 return 0; 23}

投稿2016/11/21 07:57

編集2016/11/21 07:58
Chironian

総合スコア23272

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yuto8228

2016/11/22 10:31

ありがとうございます!! 出来ればif構文を使って作成したいのですが、途中まで作って見たので質問本文の★★追記★★以降の確認をお願いしたいです。
Chironian

2016/11/22 10:55

ダブルクォートで括っている問題は対策されたようですね。 でも、gakuを同じ1000000000と比較しているので常に成立しないです。 また、その考え方の場合、学籍番号が0から始まる時、うまくいかないです。 仕様に記載がないので0から始まるものも想定するべきのように感じます。 (課題でしたら大目に見てもらえるかも。でもリアルだと結構まずいです。)
yuto8228

2016/11/23 05:42

なるほど... 今回は課題なんでこれで乗り切ります!! 助かりました! 有り難うございます。
guest

0

具体的にコードを書いてみておかしい、という場合に尋ねるのがここの使い方のですが、それはまあ置いておきます。

そもそもこれでは条件が足りないように見受けられます。
条件3 で、番号の入力が数字だけではないときはどうするのか、これでは書いてありません。動作が未定義なのですから、どうするかをプログラミングすることもできないのです。
※プログラマが勝手にあるいはお節介にどうするかを決めてプログラミングすることはありますが、それは本来はあってはいけないことです

投稿2016/11/21 07:51

tacsheaven

総合スコア13703

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問