如图所示,程序似乎无法识别用户输入的字符。我试图将N作为数组或用这些字符初始化N =但它仍然无法工作。
代码是:
#include <stdio.h>
int main()
{
int a, b, c;
char N;
printf("Please enter a value for num 1 \n");
scanf_s("%d", &a, sizeof(a));
printf("Please enter a value for num 2 \n");
scanf_s("%d", &b, sizeof(b));
printf("Please enter a character \n");
scanf_s("%s",&N, sizeof(N));
switch (N)
{
case '+' : c = (a + b); printf("The sum is : %d \n", c); break;
case '-' : c = (a - b); printf("The subtraction is : %d \n", c); break;
case '*' : c = (a * b); printf("The muliplication is : %d \n", c);
break;
case '/' : c = (a / b); printf("The division is : %d \n", c); break;
default: printf("Please enter these characters only : + - * / \n");
}
getch();
return 0;
}
答案 0 :(得分:2)
scanf_s("%d", &a, sizeof(a));
成功读取整数并留下\n
。
scanf_s("%d", &b, sizeof(b));
高兴地忽略换行符,成功读取整数并留下换行符。
scanf_s("%s",&N, sizeof(N));
尝试读取单个非空格,找到换行符,将其视为空格并失败。如果打印返回值,则可能为0.
当处理换行符时(例如通过读取并忽略它),scanf_s只有在你允许它读取你想要的单个字符和空终止符时才会成功,所以你必须至少给出2*sizeof(char)
尺寸。
当然,你需要让N足够大,实际上是两个字符,作为一个字符,它目前不是。
考虑将其设为char N[2];
。
即阅读&#39; +&#39;就像你尝试一样,你实际上是在尝试阅读&#34; +&#34;这是&#39; +&#39;和&#39; \ 0&#39;。
或者之前使用"%c"
格式说明符和其他" "
来忽略剩余的换行符。
(更优雅,更接近您的代码,由Antti Haapala提供):
scanf_s(" %c", &N, 1);
强烈推荐:
阅读您使用的功能规格并检查返回值。
可以找到帮助处理这种难以预测的行为:
http://sekrit.de/webdocs/c/beginners-guide-away-from-scanf.html
How to read / parse input in C? The FAQ