0
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”时退出。为什么?

4

3 回答 3

2

您没有在while循环中扫描。做这个:

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

只是要指出一些额外的东西,当您输入一个类似yor的字符n并按 ENTER 键时,一个字符(您输入的)和一个字符(即回车键 - 换行符)被放置在输入缓冲区中。第一个字符被消耗,scanf但换行符保留在输入缓冲区中。

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

scanf(" %c", &c);
       ^<------------Note the space
于 2013-10-09T06:22:17.353 回答
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);   ................    }
于 2013-10-09T06:46:39.033 回答
0

最好你这样做

do{
    scanf("%c",&c);
    mul();
}while (c != 'y');
于 2013-10-09T06:25:53.353 回答