【发布时间】:2019-03-08 03:45:08
【问题描述】:
在您将我的问题标记为重复之前,我已经在研究这些类似的问题和答案:
c : How to signal end of input
Stop a for loop when user is finished entering input in c
根据上述参考问题,我的代码应该是正确的,但由于某种原因,我无法让它跳出循环并在用户输入 int(例如零或减一)时开始打印输出。
为了记录,这是一个学校作业,我暂时不能使用'fgets',我们只能使用'scanf'
我真的希望有人可以在这里为我指明正确的方向。我要做的就是让用户输入未指定数量的整数并将它们存储在数组中。我知道允许的最大值数,这就是我使用数组的原因,但是我想让用户可以选择通过输入零或负一来表示输入结束。我知道它应该非常简单,但尽我所能,除非用户输入一个字符,否则我无法让它工作。
我的代码如下:
int i = 0;
int j = 0;
int full_sequence[200] = {0};
int numElements = 0;
printf("enter sequence of integers: \n");
for (i = 0; i < 200; i++)
{
if (scanf(" %d", &full_sequence[i]) ==0)
break;
//i've also tried setting i to the maximum index instead of using break, neither of which worked;
else
{
scanf(" %d", &full_sequence[i]);
numElements++;
}
}
for (j = 0; j < numElements; j++)
{
printf("\nend of input *********************");
printf("\nArray element %d is: %d", j, full_sequence[j]);
printf("\nthe number of non-zero elements is: %d", numElements);
}
return 0;
我还尝试用 while 循环替换 for 循环,并尝试使用负数作为输入结束的信号,如下所示:
while (testValue >= 0)
{
scanf("%d", &testValue);
scanf("%d", &full_sequence[i]);
{
i++;
numElements++;
}
仍然没有,控制台似乎继续期待输入,直到我输入一个字母字符,此时循环最终退出并打印我的输出。奇怪的是,scanf 函数似乎只捕获了我输入的所有其他数字。
如果我尝试重写 for 循环以在将 scanf 项添加到我的数组之前也使用测试值来验证它,类似于我在 while 循环中使用它的方式,它如下所示:
for (i = 0; i < 100; i++)
{
scanf("%d", &testValue);
if (testValue == 0)
break;
else
{
scanf("%d", &full_sequence[i]);
numElements++;
}
}
还是什么都没有。
【问题讨论】:
-
我还被告知 scanf 在正确扫描项目时返回 1,因此我可以用某些东西替换 if 语句:scanf(" %d", &full_sequence[i]) ==0)像 scanf("%d", &full_sequence[i] != 1) 但这也不起作用。我想它提出了一个问题,我如何引用存储在给定数组索引处的 int 值,而不是返回的值来指示 scanf 函数本身的成功?
-
尝试养成在使用变量的地方声明变量的习惯,以便明确它们的用途。例如:
for (int i = 0; ...)而不是提前声明i。这清楚地表明i是什么类型,以及它的作用域。 -
@tadman 好点,谢谢