【发布时间】:2018-08-04 16:49:57
【问题描述】:
我的问题如下:我需要 scanf 来读取多行用户输入。用户可以输入由空格或换行符分隔的任意字符组合。我的目标是获取由空格或换行符分隔的每个输入,并处理它并通过 printf 输出。但是,我不允许一次存储多个输入。我的问题是:每次用户按下回车键时,scanf 都会读取整行,因为我在 while 循环中有 scanf != EOF。但是,在用户按下 EOF 之前,我不希望 scanf 读取所有输入行。这可能吗?以下是一些示例:
一些伪代码:
User Input:
cat dog mouse rabbit
snake dog
pink bob
joke*/
//Some pseudo code:
char input[100];
while (scanf("%s", input) != EOF) {
printf("%s", input);
}
总而言之,我不希望 scanf 在用户按 Enter 时读取,因为如果确实如此,那么 printf 将激活但仍允许用户输入内容。 有没有办法绕过这个?注意:我必须使用 scanf 并且不能在单个数组中存储多个单独的输入(如狗或猫)。 谢谢。
【问题讨论】:
-
使用
%s和scanf()表示“我不在乎空白”。如果您确实关心空白,您可能根本不应该使用scanf(),当然也不应该使用%s。您可能正在使用%[…](扫描集)或%[^…](否定扫描集),但即使这样也是有问题的。 -
谁说你必须使用
scanf?这是某种家庭作业,有限制吗?我是一名专业的 C 程序员,我已经做了 35 年的专业 C 程序员,我不仅不会使用scanf来解决这个问题,而且我根本不会使用scanf。与使用其他更好的技术相比,使用scanf进行任何类型的有趣输入处理通常要困难得多。 (如果这是家庭作业,你别无选择,我很同情你。) -
每 cmets(关于我即将删除的答案),任务是在写入任何输出之前读取所有输入。显然,如果不存储一些数据,这是不可能的:在读取输入之后和输出之前的任何时间点,程序都必须包含产生输出所需的信息。此信息可以是输入的副本或处理输入产生的某些信息,但它必须存在于程序状态中。如果程序不能存储“多个输入”,那么它必须具有从中派生的信息才能产生输出。
-
鉴于上述情况,问题陈述应该解释如何处理输入。例如,如果任务是对单词的长度求和,并且允许存储到目前为止的长度但不存储单词,那么可以找到解决方案。