Printf仅从c中的scanf输入打印一个字
我用代码块编写并编译了这个程序:Printf仅从c中的scanf输入打印一个字,c,char,scanf,C,Char,Scanf,我用代码块编写并编译了这个程序: #include <stdio.h> #include <stdlib.h> int main() { char myChar[155]; scanf("%s", myChar); printf("%s\n", myChar); return 0; } #包括 #包括 int main(){ char-myChar[155]; scanf(“%s”,myChar)
#include <stdio.h>
#include <stdlib.h>
int main() {
char myChar[155];
scanf("%s", myChar);
printf("%s\n", myChar);
return 0;
}
#包括
#包括
int main(){
char-myChar[155];
scanf(“%s”,myChar);
printf(“%s\n”,myChar);
返回0;
}
我尝试过很多方法,但由于某些原因,当您输入一个包含多个单词的字符串时,控制台只输出第一个单词。是编译器的错误还是我在这里做错了什么?切换到
scanf("%154[^\n]", myChar);
154
为避免缓冲区溢出-[^\n]
扫描到新行
或者更好的方法是使用fgets
并去掉尾随的新行:
if (fgets(myChar, sizeof myChar, stdin))
{
myChar[strcspn(myChar, "\n")] = '\0';
}
请注意,scanf
和fgets
可能会失败,在这种情况下,您最终会打印未初始化的值(未定义的行为),以避免标准输入出现问题始终初始化字符串:
char myChar[155] = "";
切换到
scanf("%154[^\n]", myChar);
154
为避免缓冲区溢出-[^\n]
扫描到新行
或者更好的方法是使用fgets
并去掉尾随的新行:
if (fgets(myChar, sizeof myChar, stdin))
{
myChar[strcspn(myChar, "\n")] = '\0';
}
请注意,scanf
和fgets
可能会失败,在这种情况下,您最终会打印未初始化的值(未定义的行为),以避免标准输入出现问题始终初始化字符串:
char myChar[155] = "";
你做错了什么。您可能应该阅读文档以了解
%s
的实际功能。这就是scanf
和%s
的工作原理。它只存储一个[空格分隔]字。要输入整行字符串,例如:Mauser-Maschine
[scanf
将只获取Mauser
],请使用fgets
[并去除换行符]。然后,您将得到完整的字符串[带空格]。换句话说,试试:fgets(myChar,sizeof(myChar),stdin);myChar[strcspn(myChar,“\n”)]=0
scanf的f
部分是有原因的。你做错了什么。您可能应该阅读文档以了解%s
的实际功能。这就是scanf
和%s
的工作原理。它只存储一个[空格分隔]字。要输入整行字符串,例如:Mauser-Maschine
[scanf
将只获取Mauser
],请使用fgets
[并去除换行符]。然后,您将得到完整的字符串[带空格]。换句话说,试试:fgets(myChar,sizeof(myChar),stdin);myChar[strcspn(myChar,“\n”)]=0
scanf的f
部分的存在是有原因的。我不知道如何结束一个问题,再见@Mauser_Maschine@AyxanHaqverdili太糟糕了,他们这么快就离开了,他们非常漂亮:P@DavidRanieri你说的是假的个人资料照片吗?我只是想让你的答案被接受:D@AyxanHaqverdili我很欣赏,是的,我是在谈论个人资料图片:DThx的回应家伙。我不知道如何结束一个问题,再见@Mauser_Maschine@AyxanHaqverdili太糟糕了,他们这么快就离开了,他们非常漂亮:P@DavidRanieri你说的是假的个人资料照片吗?我只是想让你的答案被接受:D@AyxanHaqverdili我很欣赏,是的,我说的是个人资料图片:D