为什么这个代码在c ++中正常工作如果我使用cin但是当我在c中使用scanf时它失败了?

时间:2014-07-02 18:32:53

标签: c

我在下面写了代码:

#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);

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

如果我使用cin,,为什么此代码在c ++中正常工作但在c中使用scanf时失败?

2 个答案:

答案 0 :(得分:1)

你需要添加一行(或类似的东西):

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

输入第二个号码'\n'后,换行符会保留在stdin中,并且位于r

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

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

输入运营商:&#39; +&#39;或者&#39; - &#39;或&#39; *&#39;或者&#39; /&#39;
  *
  输入第一个数字:5
  输入第二个数字:6
  乘:30
  输入y或Y继续:
  换行

答案 1 :(得分:0)

检查以下

#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'));

}