0

Mac で単純な C プログラムを実行しようとしています。しばらくは正常に動作していましたが、突然 scanf が動作しなくなりました。私は基本的に整数値を読み込んで、入力されたものを出力したいと思っています。入力した整数に関係なく、プログラムは0を出力し続けます。ここで提案を試しましたが、何も機能しません。ターミナルと xcode の両方でプログラムを実行しようとしましたが、まだ何もありません。何か案は?

#include <stdio.h>

int main(){
  int numberOfElements = 0;
  scanf("Number of elements: %d",&numberOfElements);
  printf("%d\n",numberOfElements); //keeps returning 0 no matter the number I enter
  return 0;
}
4

3 に答える 3

4

プロンプトを印刷し、入力のみをスキャンする必要があります。

printf("Number of elements: ");
fflush(stdout);
scanf("%d", &numberOfElements);

通常、scanf()直接使用することは避けたほうがよいでしょう。代わりに、入力行をsscanf()取得し、取得した文字列を使用して、エラーをより適切に制御できます。

char line[MAX_LINE];
if (fgets(line, sizeof(line), stdin) != NULL) {
    if (sscanf(line, "%d", &numberOfElements) != 1) {
        printf("You didn't input a number: %s", line);
        /* ... */
    }
}
于 2013-06-08T00:25:38.243 に答える
3

ステートメントNumber of elements:に含める必要はありません。ステートメントを次scanfのように変更します。scanf

printf ( "Number of elements: " );
scanf ("%d", &numberOfElements );
于 2013-06-08T00:26:57.330 に答える
3

非フォーマット文字をフォーマット文字列に含める場合、これらの文字が入力ストリーム (または の場合は入力文字列) に存在する必要がscanf/fscanf/sscanfあることを意味します。これらの文字が入力に存在しない場合、失敗します。ただし、スペース文字には特別な意味があり、すべての空白をスキップしますが、空白が存在する必要はありません。sscanfscanfscanf

では、これscanfを成功させるためには

scanf("Number of elements: %d", &numberOfElements);

文字通り入力する必要があります

Number of elements: 10

また

Numberof    elements:10

また

Numberofelements:    10

またはそのようなもの。つまりNumberof、 、elementsおよび も入力する必要があり:ます。を入力しただけでは、 a mereが要求された形式と一致しないため10、は失敗します。scanf10

これはあなたの意図ではなかったと確信しています。あなたが本当にやりたかったことは、どうやら、を使用してプロンプトを印刷しprintf、次に簡単なことをすることです

scanf("%d", &numberOfElements);

前述の の機能はscanf役立つ可能性がありますが、おそらくごくまれな場合に限られます。これは、フォーマット文字列に非フォーマット テキストが含まれている場合scanf、何か問題がある可能性が高いことを意味します。

于 2013-06-08T00:29:34.330 に答える