Printf只从c中的scanf输入中打印一个单词



我用代码块编写并编译了这个程序:

#include <stdio.h>
#include <stdlib.h>
int main() {
char myChar[155];
scanf("%s", myChar);
printf("%sn", myChar);
return 0;
}

我已经尝试了很多东西,但由于某种原因,当你输入一个字符串与一个以上的单词,控制台只输出第一个单词。这是编译器的错误还是我在这里做错了什么?

切换到

scanf("%154[^n]", myChar);

154避免缓冲区溢出-[^n]扫描直到一个新的行。

或者更好,使用fgets并去掉尾随的新行:

if (fgets(myChar, sizeof myChar, stdin))
{
myChar[strcspn(myChar, "n")] = '';
}

注意scanffgets可能会失败,在这种情况下,您最终会打印一个未初始化的值(未定义的行为),为了避免标准输入的问题,始终初始化您的字符串:

char myChar[155] = "";

最新更新