使scanf在输入字符串时能够输入空格,在输入换行符时停止
时间: 2024-11-25 13:17:07 浏览: 5
在输入输出字符串时scanf(),printf()和gets(),puts()的区别浅谈
5星 · 资源好评率100%
在C语言中,`scanf()`函数默认情况下不处理空格,但可以通过一些技巧来实现类似的功能。你可以使用`fgets()`函数配合`strtok()`函数来读取整个行的内容,包括空格和换行符,然后处理每一项。这里有一个简单的示例:
```c
#include <stdio.h>
#include <string.h>
#define MAX_LINE_LENGTH 80
void read_line(char *input) {
char line[MAX_LINE_LENGTH];
fgets(line, sizeof(line), stdin);
// 去掉尾部的换行符('\n')
size_t len = strlen(line);
if (line[len - 1] == '\n') {
line[len - 1] = '\0'; // 将换行符替换为结束符
}
// 使用strtok()分割输入,忽略空格
char* token;
token = strtok(line, " ");
while (token != NULL) {
input[strlen(input)] = '\0'; // 如果已经有内容,先清空
strcat(input, token); // 添加当前项到输入字符串
input[strlen(input)] = ' '; // 每次添加后追加空格
token = strtok(NULL, " "); // 分割下一项
}
input[strlen(input) - 1] = '\0'; // 最后移除多余的空格
}
int main() {
char string[50];
read_line(string);
printf("Input with spaces: %s\n", string);
return 0;
}
```
在这个例子中,`read_line`函数首先获取一行文本,然后使用`strtok`逐个分开单词并添加到结果字符串中,同时确保每项之间有空格。这样,即使包含空格,`scanf`不是必需的。
阅读全文