所以我必须让scanf读入几个用空格分隔的字符串。但是,我事先并不知道我需要读多少个字符串,它可以是1到5之间的任何字符串,但是我似乎无法让scanf在输入后输入后停止尝试读取。我试过做天真的%s %s %s %s %s
,但是你可以想象在点击后只需说1或2个单词后它仍然希望阅读更多内容然后我也尝试%s%*[^\n]%s%*[^\n]%s%*[\n]%s%*[\n]%s%*[^\n]
以便它会尝试在新的一行字符之后停止,但这也不起作用。
那么什么是让scanf能够拥有一些可选输入部分的最佳方法。
感谢。
编辑:我知道strtok和fgets我只是想看看有没有办法用scanf做到这一点
答案 0 :(得分:6)
如何使用fgets
读取一行,然后使用strotk
/ sscanf
来解析它?然后,您将能够确定用户输入了多少个字符串。
答案 1 :(得分:3)
scanf
不强制读取整个格式字符串,一旦输入无效或没有输入就会中止。
来自http://www.cplusplus.com/reference/clibrary/cstdio/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
并按Enter键,则会打印3,aaa bbb ccc ddd
会打印4,等等。