Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Printf仅从c中的scanf输入打印一个字_C_Char_Scanf - Fatal编程技术网

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