C 可选匹配
所以我必须让scanf读入几个由空格分隔的字符串。然而,我事先不知道需要读取多少字符串,它可以是1到5之间的任意值,但我似乎无法让scanf在输入中按enter键后停止尝试读取。我试过做一些简单的C 可选匹配,c,scanf,C,Scanf,所以我必须让scanf读入几个由空格分隔的字符串。然而,我事先不知道需要读取多少字符串,它可以是1到5之间的任意值,但我似乎无法让scanf在输入中按enter键后停止尝试读取。我试过做一些简单的%s%s%s%s,但是你可以想象,在只说一两个单词后,它仍然希望读更多的内容,然后我也试着做%s%*[^\n]%s%*[^\n]%s%*[\n]%s%*[\n]%s%*[^\n],这样它会尝试在新行字符后停止,但也不起作用 那么,让scanf拥有一些可选输入部分的最佳方法是什么呢 谢谢 编辑:我知道st
%s%s%s%s
,但是你可以想象,在只说一两个单词后,它仍然希望读更多的内容,然后我也试着做%s%*[^\n]%s%*[^\n]%s%*[\n]%s%*[\n]%s%*[^\n]
,这样它会尝试在新行字符后停止,但也不起作用
那么,让scanf拥有一些可选输入部分的最佳方法是什么呢
谢谢
编辑:我知道strtok和fgets,我只是想看看是否有办法用scanf来做到这一点,用
fgets
读一行,然后strotk
/sscanf
来解析它怎么样?然后您就可以决定用户输入了多少字符串。scanf
不强制读取整个格式字符串,一旦获得无效输入或没有剩余输入,它就会中止
发件人:
成功时,函数将返回成功的项数
阅读此计数可以与预期的读数数匹配或更少,
即使是零,如果发生匹配失败
下面的代码告诉您在scanf
期间读取了多少个参数:
char s1[10], s2[11], s3[11], s4[11], s5[11];
int read = scanf("%10s %10s %10s %10s %10s", s1, s2, s3, s4, s5);
printf("Read %d strings", read);
如果您输入
aaa bbb ccc
并点击回车键,它会打印3,对于aaa bbb ccc ddd
它会打印4,等等。这就是我可能要做的事情,我只是想知道是否有办法做到这一点。@legion可能有办法,但使用scanf
本质上是不可靠的。您无法控制用户输入的内容。另一方面,当您使用fgets
时,您将所有字符串都放在缓冲区中,您可以完全自由地解析它,而不受scanf
的阻碍。