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

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

ただいまの
回答率

88.81%

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

解決済

回答 3

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 2,957

yuto8228

score 12

番号と氏名をキーボードから入力し
、ファイルに保存するプログラムを作成せよ。
条件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へ飛んでくれません…
何かが足りないですか?

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • 退会済みユーザー

    2016/11/21 17:25

    こちらの質問が他のユーザから「やってほしいことだけを記載した丸投げの質問」という指摘を受けました
    「質問を編集する」ボタンから編集を行い、調査したこと・試したことを記入していただくと、回答が得られやすくなります。

回答 3

checkベストアンサー

+1

こんにちは。

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

#include <iostream>       // std::cout
#include <string>         // std::string

int main ()
{
  std::string number;
  std::cin >> number;
  if (number.size() != 10)
  {
      std::cout << "lenght of number is not 10.\n";
      return 1;
  }

  std::size_t found = number.find_first_not_of("0123456789");
  if (found!=std::string::npos)
  {
    std::cout << "included no decimal charactor.\n";
    return 1;
  }

  std::cout << "OK : " << number << "\n";
  return 0;
}

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/11/22 19:31

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

    キャンセル

  • 2016/11/22 19:55

    ダブルクォートで括っている問題は対策されたようですね。
    でも、gakuを同じ1000000000と比較しているので常に成立しないです。

    また、その考え方の場合、学籍番号が0から始まる時、うまくいかないです。
    仕様に記載がないので0から始まるものも想定するべきのように感じます。
    (課題でしたら大目に見てもらえるかも。でもリアルだと結構まずいです。)

    キャンセル

  • 2016/11/23 14:42

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

    キャンセル

+1

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

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

+1

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

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/11/22 19:36

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

    キャンセル

  • 2016/11/22 19:44 編集

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

    キャンセル

  • 2016/11/23 14:44

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

    キャンセル

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

  • ただいまの回答率 88.81%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る