0

fgets を使用してユーザー入力を取得しようとしていますが、いくつかのファンキーな (正しくない) ことが起こっており、その理由を理解できないようです。

プログラムは、ユーザーが入力する値の数を示す引数を使用して実行されます。

プログラムの実行方法は次のとおりです。

./a.out 6
Enter 6 integer values to place in tree:
5
4
3
2
1
6
Input values:
5
4  
3
2
1
6

引数として 1 を指定すると、入力を入力することさえできなくなります。また、0 はどこから来たのでしょうか?

./a.out 1
Enter 1 integer values to place in tree:
Input values:
0

引数として 2 を指定すると、1 つの入力しか入力できず、ファントム 0 が再び表示されます。

./a.out 2
Enter 2 integer values to place in tree:
1
Input values: 
1
0

引数が 3 つ以上あれば、正しく機能します。

ソースは次のとおりです。

int main (int argc, const char* argv[]){
   int numIntegers;
   char buffer[20];
   if (argc == 1){
      printf("Usage: a.out #\n");
      return EXIT_FAILURE;
   }
   else{
      numIntegers = atoi(argv[1]);
      if (numIntegers <= 0){
         printf("# must be greater than 0\n");
         return EXIT_FAILURE; 
      }
      else{
         int intArray[numIntegers];
         printf("Enter %d integer values to place in tree: \n", numIntegers);
         for (int i = 0; i < numIntegers; i++){
            fgets(buffer, numIntegers, stdin);
            intArray[i] = atoi(buffer);
         }
         printf("Input values:\n");
         for (int i = 0; i < numIntegers; i++){
            printf(%d\n", intArray[i]);
         }
      }
   }
}//end main
4

1 に答える 1

0

へのサイズ引数fgets()は、のサイズを参照しbufferます。この場合、これは 20 である必要があります。

fgets(buffer, sizeof(buffer), stdin);

ところで、あなたのコードは実際にはコンパイルされません。

printf(%d\n", intArray[i]);    // missing a quotation mark
于 2013-10-16T00:29:19.947 に答える