【发布时间】:2016-01-15 06:34:57
【问题描述】:
我正在尝试将用空格分隔的数字从标准输入读取到 c 程序中,并在每个数字上添加一个节点到链表。
来自标准输入的输入:
20
20 30 123 34 50
stdin (20) 的第一行用于查找编号为 20 的项目。 第二行包含要插入到链表中的数据项 进入后它应该结束循环,但它不是,我不确定我在这里错过了什么。
char follow;
scanf("%d", &M);
while(((count = scanf("%d%c", &element, &follow)) > 0))
{
if(count == 2 && isspace(follow) || count == 1)
{
printf("count = %d and element = %d\n", count, element);
push(&root, element);
}
else{
break;
}
}
问题是 while 循环不会在按 Enter 时结束。
【问题讨论】:
-
如果使用
"%d"格式,则不需要读取空格,它将跳过前导空格。 -
@JoachimPileborg - 我试过这样做但没有运气 while(((count = scanf("%d", &element)) > 0)) { printf("count = %d and element = % d\n", 计数, 元素);推(&根,元素); }
-
现在的问题是,在你显示的那个之后会有other输入吗?有任何输入吗?然后,您可能必须使用例如将该行作为一行读取。
fgets,在空间上拆分输入(例如strtok)并将数字显式转换为整数(例如strtol)。如果这是用户将给程序的唯一输入,那么您根本不需要空格处理,但您需要用户按“eof”键(Windows 上为CTRL-Z,CTRL-D上POSIX 系统(如 Linux 或 OSX)来终止输入。或者也使用上面描述的行处理。 -
这是因为换行符是
white space字符。因此isspace('\n')将返回 true。 -
@JoachimPileborg 似乎输入键是哨兵。