このプログラムが提供した入力を出力しないのはなぜですか?(C)

コライ旅団

私が持っているコード:

int main(){
    char readChars[3];
    puts("Enter the value of the card please:");
    scanf(readChars);
    printf(readChars);
    printf("done");
}

表示されるのは、ターミナルに値を入力してEnterキーを押した後、「完了」だけです。なぜですか。

編集:

scanfのプロトタイプではありません:

int scanf(const char *format, ...);

だから私はたった1つの引数でそれを使うことができるはずですか?

ピーター-モニカを復活させる

はい、scanf1つのパラメータで呼び出すことが可能であり、場合によっては便利なこともあります。しかし、それはあなたが明らかに思っていたことをしません。(入力ストリームの引数の文字を期待してスキップします。)プログラマーとしてのデューデリジェンスを怠ったため、気づきませんでした。私はあなたがすべきことをリストします:

  • RTFM。 scanfの最初のパラメータはフォーマット文字列です。変換シーケンスの一部ではなく、空白でもないプレーン文字は、文字通り入力で予期されます。それらは読み取られて破棄されます。それらが表示されない場合、変換はそこで停止し、予期しない文字が発生した入力ストリーム内の位置が後続の読み取りの開始になります。あなたの場合、おそらく入力から文字が正常に読み取られたことはありませんが、フォーマット文字列を初期化していないため、確実にはわかりません(以下を参照)。もう1つの興味深い詳細はscanf、正常に読み取られたアイテムの数を示すの戻り値です。以下では、戻り値を確認することの重要性とともに説明します。

  • ローカルを初期化します。Cは、パフォーマンス上の理由からローカルデータを自動的に初期化しません(今日では、他の言語のようにユーザーの初期化を強制するか、自動初期化をデフォルトにして、問題が発生するいくつかの内部ループをオプトアウトする可能性があります)。初期化readcharsしていないため、何が含まれているのかわからないためscanf、入力ストリームで何が期待されているのかわかりませんその上、それはおそらく名目上未定義の振る舞いです。(しかし、あなたのPCでは、予期しないことは何もしないはずです。)

  • 戻り値を確認してください。 scanfあなたの例ではおそらく0を返しました。マニュアルには、scanfは正常に読み取られたアイテムの数(ここでは0)を返すと記載されています。つまり、入力変換は行われませんでした。このタイプの検出されない障害はscanf、一連のトークンから1回限りのインデックスを読み取る可能性があるため、読み取り操作の長いシーケンスで致命的となる可能性があります。

我慢してください-私はいつもマニュアルを読んだり、戻り値をチェックしたり、(エラーによって)小さなテストプログラムの変数を初期化したりするわけではありません。しかし、それが機能しない場合、それは私の調査の一部です。そして、世界はもちろんのこと、誰かに尋ねる前に、私は自分が間違ったことを事前に見つけるために最善を尽くしたことを確認します。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

何も入力しないと、プログラムが「@」を出力するのはなぜですか?

分類Dev

このC ++プログラムが出力を表示しないのはなぜですか?

分類Dev

このCプログラムがunsignedintを出力しないのはなぜですか?

分類Dev

このプログラムが一度表示して入力を要求するのではなく、出力を無限に表示するのはなぜですか

分類Dev

このプログラムが目的の出力を出力しないのはなぜですか?

分類Dev

このコードを実行しているときに、このcコードが入力を受け入れないのはなぜですか。このプログラムは何も入力せずに存在し始めています

分類Dev

プログラムがnextLineを出力しないのはなぜですか?

分類Dev

「q」を入力してもプログラムが終了しないのはなぜですか?

分類Dev

このプログラムが「4」を出力しないのはなぜですか?

分類Dev

このアセンブリプログラムが出力を生成しないのはなぜですか?

分類Dev

このプログラムのscanf()が入力を取得できないのはなぜですか?

分類Dev

Cプログラムが正しい文字列を出力しないのはなぜですか?

分類Dev

このhtmlプログラムがこのような出力を提供するのはなぜですか?

分類Dev

このプログラムが返されたイテレータの正しい2番目の要素を出力しないのはなぜですか?

分類Dev

私のプログラムが別のプログラムのパイプ出力を正しく受け入れないのはなぜですか?

分類Dev

特定の形状の領域の測定値を入力した後、プログラムが終了しないのはなぜですか?

分類Dev

プログラムが目的の出力を提供しないのはなぜですか?何が問題なのですか?

分類Dev

このプログラムの出力が予期しないのはなぜですか?

分類Dev

私のプログラムがProjectEuler 17の正しい答えを出力しないのはなぜですか?

分類Dev

単語を逆にするこのc ++プログラムが機能しないのはなぜですか

分類Dev

プログラムが私が勝ったことを検出しないのはなぜですか(Towers OfHanoi)?

分類Dev

なぜプログラムは、ユーザからの入力を取得しないのですか?

分類Dev

なぜこのC ++プログラムは何も出力しないのですか?

分類Dev

次のプログラムが出力(ArrayList)を出力しないのはなぜですか?

分類Dev

このプログラムが機能しないのはなぜですか?

分類Dev

このプログラムが機能しないのはなぜですか?

分類Dev

このC ++プログラムが入力の最初の行で機能するのに、2番目または3番目では機能しないのはなぜですか?

分類Dev

printf(i)がこのプログラムの出力として0を与えるのはなぜですか?

分類Dev

プログラム内のリストが予期しない出力を表示するのはなぜですか?

Related 関連記事

  1. 1

    何も入力しないと、プログラムが「@」を出力するのはなぜですか?

  2. 2

    このC ++プログラムが出力を表示しないのはなぜですか?

  3. 3

    このCプログラムがunsignedintを出力しないのはなぜですか?

  4. 4

    このプログラムが一度表示して入力を要求するのではなく、出力を無限に表示するのはなぜですか

  5. 5

    このプログラムが目的の出力を出力しないのはなぜですか?

  6. 6

    このコードを実行しているときに、このcコードが入力を受け入れないのはなぜですか。このプログラムは何も入力せずに存在し始めています

  7. 7

    プログラムがnextLineを出力しないのはなぜですか?

  8. 8

    「q」を入力してもプログラムが終了しないのはなぜですか?

  9. 9

    このプログラムが「4」を出力しないのはなぜですか?

  10. 10

    このアセンブリプログラムが出力を生成しないのはなぜですか?

  11. 11

    このプログラムのscanf()が入力を取得できないのはなぜですか?

  12. 12

    Cプログラムが正しい文字列を出力しないのはなぜですか?

  13. 13

    このhtmlプログラムがこのような出力を提供するのはなぜですか?

  14. 14

    このプログラムが返されたイテレータの正しい2番目の要素を出力しないのはなぜですか?

  15. 15

    私のプログラムが別のプログラムのパイプ出力を正しく受け入れないのはなぜですか?

  16. 16

    特定の形状の領域の測定値を入力した後、プログラムが終了しないのはなぜですか?

  17. 17

    プログラムが目的の出力を提供しないのはなぜですか?何が問題なのですか?

  18. 18

    このプログラムの出力が予期しないのはなぜですか?

  19. 19

    私のプログラムがProjectEuler 17の正しい答えを出力しないのはなぜですか?

  20. 20

    単語を逆にするこのc ++プログラムが機能しないのはなぜですか

  21. 21

    プログラムが私が勝ったことを検出しないのはなぜですか(Towers OfHanoi)?

  22. 22

    なぜプログラムは、ユーザからの入力を取得しないのですか?

  23. 23

    なぜこのC ++プログラムは何も出力しないのですか?

  24. 24

    次のプログラムが出力(ArrayList)を出力しないのはなぜですか?

  25. 25

    このプログラムが機能しないのはなぜですか?

  26. 26

    このプログラムが機能しないのはなぜですか?

  27. 27

    このC ++プログラムが入力の最初の行で機能するのに、2番目または3番目では機能しないのはなぜですか?

  28. 28

    printf(i)がこのプログラムの出力として0を与えるのはなぜですか?

  29. 29

    プログラム内のリストが予期しない出力を表示するのはなぜですか?

ホットタグ

アーカイブ