Printf 仅从 c 中的 scanf 输入打印一个单词
Printf only printing one word from scanf input in c
我在代码块中编写并编译了这个程序:
#include <stdio.h>
#include <stdlib.h>
int main() {
char myChar[155];
scanf("%s", myChar);
printf("%s\n", myChar);
return 0;
}
我尝试了很多方法,但由于某种原因,当您输入一个包含多个单词的字符串时,控制台只输出第一个单词。是编译器的问题还是我做错了什么?
切换到
scanf("%154[^\n]", myChar);
154
以避免缓冲区溢出 - [^\n]
扫描直到换行。
或更好,使用 fgets
并删除尾随的新行:
if (fgets(myChar, sizeof myChar, stdin))
{
myChar[strcspn(myChar, "\n")] = '[=11=]';
}
请注意 scanf
和 fgets
可能会失败,在这种情况下您最终会打印未初始化的值(未定义的行为),以避免标准输入出现问题总是初始化您的字符串:
char myChar[155] = "";
我在代码块中编写并编译了这个程序:
#include <stdio.h>
#include <stdlib.h>
int main() {
char myChar[155];
scanf("%s", myChar);
printf("%s\n", myChar);
return 0;
}
我尝试了很多方法,但由于某种原因,当您输入一个包含多个单词的字符串时,控制台只输出第一个单词。是编译器的问题还是我做错了什么?
切换到
scanf("%154[^\n]", myChar);
154
以避免缓冲区溢出 - [^\n]
扫描直到换行。
或更好,使用 fgets
并删除尾随的新行:
if (fgets(myChar, sizeof myChar, stdin))
{
myChar[strcspn(myChar, "\n")] = '[=11=]';
}
请注意 scanf
和 fgets
可能会失败,在这种情况下您最终会打印未初始化的值(未定义的行为),以避免标准输入出现问题总是初始化您的字符串:
char myChar[155] = "";