这里有任何逻辑错误吗?

时间:2013-10-09 06:20:06

标签: c while-loop

void mul()   
{  
    int x,y,sum = 0;
    scanf("%d",&x);
    scanf("%d",&y);
    while (x != 0){
        if (x%2 != 0)
            sum = sum + y; 
        x = x/2;
        y = 2*y;
    }
    printf("%d",sum);
}

int main()   
{   
    char c;
    printf("Enter two numbers and y to exit");
    //mul();
    scanf("%c",&c);
    while (c != 'y'){
        mul();
    }
    return 0;
}

在运行此程序时,不会退出输入' y'。为什么呢?

3 个答案:

答案 0 :(得分:2)

您没有在while循环中进行扫描。这样做:

char c = 'n';
while (c != 'y')
{
    printf("Enter two numbers and y to exit");
    scanf("%c",&c);
    mul();
}

当你输入一个像yn这样的字符并点击ENTER键,一个字符(你输入的字符)和一个字符(这是输入击键 - )时,只需指出一些额外的东西。新行字符放在输入缓冲区中。第一个字符被scanf消耗,但换行符仍然在输入缓冲区中。

解决方案是使用以下内容消耗额外的换行符:

scanf(" %c", &c);
       ^<------------Note the space

答案 1 :(得分:0)

你做得更好

do{
    scanf("%c",&c);
    mul();
}while (c != 'y');

答案 2 :(得分:0)

尝试使用此代码或在代码中添加“static int main”。

 int Main() 
{
   char c;
   printf("Enter y to exit");
   scanf("%c",&c);
   while (c != 'y')
     {
        mul();
      } return 0;   }

void mul()   {  
printf("Enter two numbers");  
int x,y,sum = 0;  
scanf("%d",&x);  
scanf("%d",&y);   ................    }