2013-10-09 75 views
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'時退出。爲什麼?這裏是否有邏輯錯誤?

+0

您將遇到'scanf()'讀取整數將爲'scanf()'讀取要處理的字符的新行。您應該通過打印您讀取的數據進行調試,以便了解該程序是否獲得了您認爲正在獲得的輸入內容。你也應該測試'scanf()'的返回值;如果您有早期的EOF,您會得到奇怪的行爲,或者當您期望數字數據時,會得到非數字數據。 –

回答

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

(或者更重要的一點,他不會修改while循環中的'c')。 –

+1

@Acme:並且事先將'char c'初始化爲一個虛擬值 – Enigma

+1

'mul()'應該位於'scanf()'之前 – Rohan

0

更好的你做這樣

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

試試這個代碼或只需添加「靜態INT主」在你的代碼。

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); ................ } 
+0

'public static int main'不是C. –

+0

@ YuHao感謝哥們,我沒有注意到它。 – Rajeshkumar