2014-02-23 116 views
0

我有以下代碼,我想終止while循環,如果除1 & 2以外的任何鍵被按下。但只有do執行一次。而不是while。爲什麼我的while condition總是錯誤的。請指導:做,而不是執行,意外終止

char a; 

do 
{ 
    printf("To Enter the Employee sales press 1 \n"); 
    printf("To Add more items press 2 \n "); 
    printf("Press any key to Terminate \n\n"); 

     scanf("%c", &a); 
    if (a == '1') 
    { 
     printf("1 is presed "); 
    } 
    else if(a == '2') 
    { 
     int c; 

     printf("entre Value:"); 
     scanf("%d",&c); 
     printf("\n"); 
     addItem(&myArray, &size, c); 
     printitems(myArray, size); 
    } 
}while(a == '1' || a == '2'); 

編輯很抱歉,那是在單QOUT。我忘了把最新的代碼。即使使用qoutes,它也不會運行。

+3

一個==「1」 ...(單引號)? – darshandzend

回答

2

你需要你的%cscanf()前的空間:

scanf(" %c", &a); 

你雷丁輸入的第一個字符,並留下一個在緩衝。所以,如果你輸入:

'1'你真正得到兩個字符,第一'1'然後'\n'(「1」,則新行字符,當你按下回車鍵出現這種情況)。所以它首先將'1'存儲到a中,然後第二次將其餘的換行符讀入a,(它會跳過「跳過」要求輸入)。由於'\n'不等於'1''2'所以它正確退出。

添加空間%c告訴前scanf()忽略留在緩衝區中的所有空白(新行字符算作空格)

+0

在我最瘋狂的夢中無法想象這件事。非常適合你的時間。我很愚蠢。謝謝 :) – Munsaf

1

您已將'a'聲明爲char類型。而你的條件是


while(a == 1 || a == 2);


它應該是


而(一個== '1' ||一個== '2');

+0

檢查您的addItem和printitems是否完美。 沒有使用這兩個功能,它完美的作品 – Alex