程序不会识别字符

时间:2018-05-06 10:24:58

标签: c switch-statement

如图所示,程序似乎无法识别用户输入的字符。我试图将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;
}

default switch statement is chosen instead of others

1 个答案:

答案 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