2013-10-16 64 views
0

我想获得用户输入使用fgets和一些时髦(不正确)的事情正在发生,我似乎无法理解为什么。fgets里面的For循环造成奇怪的行为

程序运行的参数指示用户输入的值有多少。

这里是程序应该如何运行:

./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 

回答

0

大小参数fgets()buffer大小,它应该是20,你的情况。

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

顺便问一下,你的代码实际上不会编译。

printf(%d\n", intArray[i]); // missing a quotation mark 
+0

谢谢克里斯,解决了它!它总是小事。 – FrankyJ542