【问题标题】:why this code works fine in c++ if i use cin but it fails when i use scanf in c?如果我使用 cin,为什么这段代码在 c++ 中可以正常工作,但是当我在 c 中使用 scanf 时它会失败?
【发布时间】:2014-07-03 02:43:42
【问题描述】:

我写了以下代码:

#include<stdio.h>
int main() {
    char o,r;
    int x,y;
    do {
        printf("Enter operator: '+' or '-' or '*' or '/'\n");
        scanf("%c",&o);
        printf("Enter first number: ");
        scanf("%d",&x);
        printf("Enter second number: ");
        scanf("%d",&y);
        switch(o) {
            case '+':
                printf("Sum: %d",x+y);
                break; 
            case '-':
                printf("Subtract: %d",x-y);
                break;
            case '*':
                printf("Multiply: %d",x*y);
                break;
            case '/':
                printf("Division: %d",x/y);
                break;
            default:
                printf("Wrong operator entered.");
        }
        printf("\nEnter y or Y to continue: ");
        scanf("%c",&r); // r is not getting value?. why?
    } while((r=='y')||(r=='Y'));
}

r 没有获得价值,因此它没有做它应该做的事情。

printf("\nEnter y or Y to continue: ");
scanf("%c",&r);

似乎是什么问题?我错过了什么吗?

如果我在 c++ 中使用 cin,,为什么这段代码可以正常工作,但在 c 中使用 scanf 时却失败了?

【问题讨论】:

  • 对我来说(gcc 4.8.2),此代码在CC++ 中都“失败”。

标签: c


【解决方案1】:

您需要添加该行(或类似内容):

while(getchar() != '\n');

输入第二个数字后,换行符'\n' 将留在stdin 中,并被放置在r 中。

您可以通过在while 循环之后添加以下行来证明这一点:

if(r == '\n')
    printf("\nnewline\n");

输入运算符:“+”或“-”或“*”或“/”
*
输入第一个数字:5
输入第二个数字:6
乘:30
输入 y 或 Y 继续:
换行

【讨论】:

    【解决方案2】:

    检查下面

    #include<stdio.h>
    int main()
    {
        char o,r;
        int x,y;
        do{
            printf("Enter operator: '+' or '-' or '*' or '/'\n");
            scanf(" %c",&o);
            printf("Enter first number: ");
            scanf("%d",&x);
            printf("Enter second number: ");
            scanf("%d",&y);
            switch(o)
            {
                case '+':
                    printf("Sum: %d",x+y);
                    break; 
                case '-':
                    printf("Subtract: %d",x-y);
                    break;
                case '*':
                    printf("Multiply: %d",x*y);
                    break;
                case '/':
                    printf("Division: %d",x/y);
                    break;
                default:
                    printf("Wrong operator entered.");
            }
            printf("\nEnter y or Y to continue: ");
            scanf(" %c",&r);
        } while((r=='y')||(r=='Y'));
    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-02-27
      • 1970-01-01
      • 2022-01-22
      • 2021-06-19
      • 2021-11-29
      • 1970-01-01
      • 2021-12-26
      相关资源
      最近更新 更多