【发布时间】:2019-05-02 20:52:07
【问题描述】:
我编写了一个程序,它将未知数量的整数扫描到一个数组中,但是当我运行它时,它会无限次打印它获得的最后一个值。
例如对于输入:1 2 3 4 5
输出将是 55555555555555555555555...
为什么会发生这种情况,我该如何解决?
我的目标是创建一个数组,例如 {1, 2, 3, 4, 5},然后将扫描到的内容打印到数组中,仅一次...
int *pSet = (int*) malloc(sizeof(int)); int i; int c;
printf("Please enter a stream of numbers to make a set out of them: ");
printf("\n");
scanf("%d", &c);
pSet[0] = c;
printf("%d ", c);
for(i = 1; c != EOF; i++) {
pSet = (int*) realloc(pSet, sizeof(int)*(i+1));
if(pSet == NULL) {
return FAIL;
}
scanf("%d", &c);
pSet[i] = c;
printf("%d ", c);
}
free(pSet);
【问题讨论】:
-
你永远不会检查
scanf()是否真的有效。 -
我尝试根据您发送的内容修复我的输入,但它并没有改变任何东西。我发送给程序:1 2 3 4 5 (Enter) (Enter) @BurnsBA
-
如果 scanf() 不起作用,则变量 c 不会被初始化。程序打印 c,在打印 c 时为 5。我几乎不认为这是问题所在……但无论如何,谢谢! @AndrewHenle
-
这几行主要是自包含代码中的一个问题是生来在调试器中单步执行。并且停止忽略那些
scanf调用的结果,以免你违反Spencer's Sixth Commandment。最后,我挑战你指出,在documentation forscanf中,它声明一旦流达到相同的状态(因为不存在这种行为),它会使用EOF填充整数格式的输出参数。简短版:阅读并理解您正在使用的功能的要求。 -
删除了不必要的“[未解决]”标题编辑。解决了还是没解决,标题不用改。
标签: c loops printf command-line-interface scanf