我正在学习C语言,我有一个问题。
当用户打印输入时,我将从控制台停止阅读。
理想情况下,用户将输入此
1 2 3 4 5
并且在输入5之后,程序将输出
1
2
3
4
5
我有这段代码:
#include <stdio.h>
#include <stdlib.h>
#define SIZE 5
int main()
{
int vector[SIZE] = {0}, number, counter = 0,i;
while (scanf("%d", &number) != EOF && counter < SIZE){
vector[counter] = number;
counter++;
}
for (i = 0; i < counter; i++){
printf("%d\n", vector[i]);
}
return 0;
}
现在,程序如果我输入1 2 3 4 5
然后点击ENTER,它就不会停止,如果我输入1 2 3 4 5 6
,程序就会停止。
两件事。
我相信扫描到EOF的条件是什么都没做。其次,程序仅因counter < SIZE
那么,如何在用户点击进入后停止?
感谢
答案 0 :(得分:3)
一种选择是交换条件的顺序:
while (counter < SIZE && scanf("%d", &number) != EOF){
当条件从左向右评估时,您的程序在评估scanf(%d...
之前等待新输入(通过counter < SIZE
))。此更改将导致程序在键入5之后立即退出while循环,在用户按Enter之前,因为它在处理5之后评估counter < SIZE
。
(如果选择此选项,您还需要在开始重复数字之前打印结束字符,因为用户在开始打印之前不会按Enter键。
如果您希望程序在用户按Enter键时退出循环,则必须更改scanf。 scanf(%d...
读取数字,而结束字符不数字。
答案 1 :(得分:1)
这是我头脑中的一种方法(警告,未经测试):
int number;
char nl = 0;
while (counter < 5 && scanf("%d%c", &number, &nl) != EOF)
{
...
/**
* If we picked up a newline, exit the loop.
*/
if (nl == '\n')
break;
}
答案 2 :(得分:0)
尝试检查输入的最后一个字符,看它是否为\n
。 ENTER
不构成EOF
,通常是\n
字符。