1、 使用 scanf 和 %[^\n]
该格式说明符会读取整行输入,直到遇到换行符(\n
),包括空格。
#include <stdio.h>
int main() {
char input[100]; // 用于存储输入的字符数组
printf("请输入一段带空格的字符串: ");
scanf("%[^\n]", input); // 读取到换行符之前的所有内容
printf("你输入的是: %s\n", input);
return 0;
}
2、清理输入缓冲区
有时候需要清理输入缓冲区,以避免残留的换行符导致问题。在读取输入前,可以使用以下代码清理缓冲区,
#include <stdio.h>
void clear_input_buffer() {
int ch;
while ((ch = getchar()) != '\n' && ch != EOF);
}
int main() {
int number;
printf("Enter a number: ");
if (scanf("%d", &number) != 1) {
printf("Invalid input! Clearing buffer...\n");
clear_input_buffer();
} else {
printf("You entered: %d\n", number);
}
printf("Enter another input: ");
clear_input_buffer(); // 确保缓冲区已清空
char str[50];
fgets(str, sizeof(str), stdin); // 使用 fgets 读取剩余输入
printf("You entered: %s", str);
return 0;
}
3、使用 fgets 替代 scanf
相比于 scanf
,fgets
通常是更好的选择,特别是当需要处理带空格的输入时。fgets
还能更好地处理换行符和缓冲区溢出。
#include <stdio.h>
int main() {
char input[100]; // 用于存储输入的字符数组
printf("请输入一段带空格的字符串: ");
fgets(input, sizeof(input), stdin); // 读取整行输入
printf("你输入的是: %s", input);
return 0;
}
4、使用占位符跳过空白字符
如果将 scanf
与 %s
结合使用,可以在 %s
前添加一个空格来忽略前导空白字符。
#include <stdio.h>
int main() {
char input1[50], input2[50];
printf("请输入两个用空格分隔的字符串:\n");
scanf(" %s %s", input1, input2); // 在 %s 前加空格跳过前导空白
printf("第一个字符串: %s\n", input1);
printf("第二个字符串: %s\n", input2);
return 0;
}
5、直接使用 getline (POSIX 标准)
如果使用的是支持 POSIX 标准的编译器,可以直接使用 getline
,
#include <stdio.h>
#include <stdlib.h>
int main() {
char *input = NULL;
size_t len = 0;
printf("请输入带空格的内容:\n");
getline(&input, &len, stdin); // 动态分配内存读取一行
printf("您输入的是:%s", input);
free(input); // 用完后释放内存
return 0;
}