我正在尝试输入数组,直到用户输入- 1退出输入模式。
当输入-1时,但至少在输入了两个值之后,此代码块中发生了奇怪的事情。

#define ARRAYSIZE 100
int input[ARRAYSIZE];
int i=0;
do {
  printf("Enter data #%d or -1 to exit: ", i);
  scanf("%d", &input[i]);
} while(input[i++] != -1 && i<ARRAYSIZE)

代码将无限期地挂起。我已经编译并运行在两个独立的体系结构上,但是当它在gdb中运行时,问题不会出现。
插入print语句表明代码确实挂在scanf语句上。
有人知道这是什么原因吗?

最佳答案

您从未检查保存的数据的值(它检查的是下一个未初始化的元素),而do while更适合

#define ARRAYSIZE 100
int input[ARRAYSIZE],i=0;
do {printf("Enter data #%d or -1 to exit: ", i);
    scanf("%d", &input[i]);
}while(input[i] != -1 && ++i<ARRAYSIZE);
//if this is main() you need a return 0; here also or it will hang

09-20 05:20