无法为c中带有scanf的字符变量赋值?

无法为c中带有scanf的字符变量赋值?,c,variables,char,scanf,C,Variables,Char,Scanf,抱歉,标题有点模糊。我试图运行一个简单的程序,用户输入一个字符,它会立即被调用。 到目前为止我有 #include <stdio.h> int main(){ char ch; printf("Enter one char\n"); scanf_s("%c", &ch); printf("the char is %c.\n",ch); return(0); } #包括 int main(){ char ch; printf(“输入一个字符\n”); scanf_s(“%c”

抱歉,标题有点模糊。我试图运行一个简单的程序,用户输入一个字符,它会立即被调用。 到目前为止我有

#include <stdio.h>
int main(){
char ch;
printf("Enter one char\n");
scanf_s("%c", &ch);
printf("the char is %c.\n",ch);
return(0);
}
#包括
int main(){
char ch;
printf(“输入一个字符\n”);
scanf_s(“%c”和“ch”);
printf(“字符是%c.\n”,ch);
返回(0);
}
但出于某种原因,它返回“char is”,我不知道为什么

如果我把它改成

#include <stdio.h>
int main(){
int ch;
printf("Enter one char\n");
scanf_s("%d", &ch);
printf("the char is %d.\n",ch);
return(0);
}
#包括
int main(){
int-ch;
printf(“输入一个字符\n”);
scanf_s(“%d”和“ch”);
printf(“字符是%d.\n”,ch);
返回(0);
}
它工作正常,返回我输入的整数,因此我认为问题不在于代码结构。出于某种原因,我似乎无法为ch变量赋值。任何帮助都将不胜感激。

试试
scanf_s(“%c”&ch,1)


valter

您使用的是安全版本的scanf,请始终记住,scanf\u需要使用缓冲区大小参数,因此为了使scanf\u在您的程序中工作,请使用此参数

scanf_s("%c", &ch, 1);
其中,1是缓冲区大小参数。HTH:)


编辑:还有一件事,就是当您将程序设置为int时,为什么程序会工作,因为scanf\u s不需要integer的缓冲区大小参数,但是当您读取字符、字符串、数组时,您应该强制提供缓冲区大小参数。将scanf\u s()替换为scanf()因为scanf_s()是特定于Microsoft的。我的scanf()代码运行良好。

您应该检查
scanf_s()
的返回值,以确保得到有效的响应。+1:C11(ISO/IEC 9899:2011)附录K(K.3.5.3.2
fscanf_s
函数)说:
fscanf_s
函数与
fscanf
等效,除了
c
s
[
转换说明符应用于一对参数(除非
*
指示赋值抑制)。其中第一个参数与
fscanf
的参数相同。该参数在参数列表中紧跟第二个参数,其类型为
rsize\t
,并给出该对的第一个参数指向的数组中的元素数。[…续…][…续…]如果第一个参数指向标量对象,则它被视为一个元素数组。还有一个很长的脚注。相同的规则适用于
scanf_s()
。非常感谢。这非常有效。我已经为此搜索了几个小时的解决方案。我没想到会有如此有用的即时响应。如果您愿意详细说明或推荐一个好的源代码,我很乐意听到关于缓冲区大小的争论以及数字1的相关性。欢迎:)检查此链接