發佈的代碼中有許多錯誤。 #define bool p
是錯誤的,因爲它將bool
重新定義爲p
的宏。同樣,#define y 1
和#define n 0
不會按照您的想法進行,而是分別定義代替源代碼中出現的y
和n
的宏,其中和0
分別代替。
標準C(或我知道的任何其他C)中沒有%B
轉換說明符。 &p
取未定義變量的地址。
考慮限定可變cont
作爲bool
,並改變基於用戶輸入來控制你的循環其值:
#include <stdio.h>
#include <stdbool.h>
int main(void)
{
bool cont = false;
char input;
do {
printf("Do you want to continue (y/n)? ");
scanf(" %c", &input);
if (input == 'y' || input == 'Y') {
cont = true;
} else {
cont = false;
}
} while (cont);
return 0;
}
這裏,cont
僅true
當用戶進入或y
Y
。還請注意scanf()
格式字符串的開始處的空格:" %c"
。這將導致scanf()
跳過領先的空格,包括換行,這可能是在輸入流中(如以前的調用所留下來scanf()
。
需要注意的是更好的代碼將檢查由scanf()
返回的值,或者可能使用fgets()
和sscanf()
,而不是scanf()
,更仔細地驗證輸入
樣品的相互作用:
Do you want to continue (y/n)? Y
Do you want to continue (y/n)? Y
Do you want to continue (y/n)? N
閱讀字符,檢查它是否是或否,並相應地設置一個布爾變量 – Alexander