不能用c中的scanf为字符变量赋值?

时间:2014-01-22 03:25:50

标签: 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);
}

但由于某种原因,这会返回“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);
}

它工作正常并返回我输入的整数,所以我不认为问题是代码结构。出于某种原因,我似乎无法为ch变量赋值。任何帮助将不胜感激。

3 个答案:

答案 0 :(得分:1)

尝试
scanf_s("%c", &ch, 1);

瓦尔特

答案 1 :(得分:0)

您正在使用的是scanf的安全版本,并始终记住 scanf_s 需要缓冲区大小参数才能工作,以便使scanf_s在您的程序中运行使用这个

scanf_s("%c", &ch, 1);

其中 1是缓冲区大小参数。 HTH:)

编辑:还有一件事,为什么你的程序工作时你把它作为int,因为scanf_s不需要整数的缓冲区大小参数,浮动但是每当你是读取字符,字符串,数组时,您应该强制提供缓冲区大小参数。

答案 2 :(得分:-1)

将scanf_s()替换为scanf(),因为scanf_s()是Microsoft特定的。我正在使用scanf()运行良好的代码。