scanf
是 C 语言中的一个输入函数,用于从标准输入(通常是键盘)读取格式化的输入。当你使用 scanf
并且格式字符串中包含空白字符(如空格、制表符或换行符)时,scanf
会停止读取输入,直到遇到下一个空白字符为止。这意味着,如果你的格式字符串中只有一个 %s
,scanf
只会读取输入中的第一个单词。
scanf
使用格式字符串来决定如何读取输入。例如,%s
表示读取一个字符串,直到遇到空白字符。scanf
中,它们用作分隔符。scanf
提供了一种简单的方式来读取格式化的输入。%s
外,scanf
还支持 %d
、%f
、%c
等多种格式说明符,可以读取整数、浮点数、字符等。%s
。%d
或 %f
。问题:scanf
仅读取句子中的一个单词。
原因:这是因为 scanf
在遇到空白字符时会停止读取。如果你只使用 %s
,它只会读取到第一个空白字符之前的内容。
解决方案:
scanf
调用:如果你想读取整个句子中的每个单词,可以使用循环和多个 scanf
调用。#include <stdio.h>
int main() {
char word[100];
while (scanf("%s", word) != EOF) {
printf("%s\n", word);
}
return 0;
}
注意:这个示例会一直读取输入,直到遇到文件结束符(EOF)。在实际应用中,你可能需要添加其他逻辑来控制循环的结束。
fgets
和 strtok
:另一种方法是使用 fgets
读取整行输入,然后使用 strtok
函数来分割字符串。#include <stdio.h>
#include <string.h>
int main() {
char line[256];
if (fgets(line, sizeof(line), stdin)) {
char *token = strtok(line, " \n");
while (token != NULL) {
printf("%s\n", token);
token = strtok(NULL, " \n");
}
}
return 0;
}
这个示例会读取整行输入,并使用空格和换行符作为分隔符来分割字符串。然后,它会打印出每个单词。
领取专属 10元无门槛券
手把手带您无忧上云