[英]Enter '/' to exit a program in C
我被困在一個練習中。 每當我在輸入中輸入斜杠 ( /
) 時,循環都不會結束。
是否可以檢查輸入數據類型? 所以如果它是數字,那么show()
執行。 當它是character('/')
然后退出。
#include <stdio.h>
#include <stdlib.h>
void show(int);
int main(){
int quit = 0;
printf("Enter a number to display: \n* times the input number\n");
printf("Enter '/' to exit.\n");
printf("======================\n\n");
while(!quit) {
printf("Input: ");
int input;
scanf("%d", &input);
if (input == '/')
quit = 1; // Suppose to exit when input = '/'
else
show(input);
printf("\n\n");
}
}
void show(int n) {
for (int i=1; i<=n; i++)
printf("*");
}
如果要與'/'
進行比較,則應使用char
變量,而不是int
。 所以使用"%c"
作為scanf()
的格式字符串。 否則, scanf()
不會讀取您的'/'
因為它不是整數。
此代碼段將具有您期望的行為:
while (!quit) {
char input;
scanf("%c", &input);
if (input == '/')
quit = 1;
如果您讀取一個數字,那么您可以將0
( 48
或'0'
)的 ASCII 值減去您的char
這樣您最終將得到它的int
等效值:
show(input - '0');
show(input - 48);
scanf
%d
需要int
數據類型。 當您輸入'/'
,它會跳過'/'
並查找int
數據類型。 它什么也沒找到,這個'\\'
留在緩沖區中。 在下一次迭代中,它找到相同的char
類型並再次跳過這個字符,這個循環繼續導致無限循環。
您有關於 while 循環內的輸入類型的錯誤:
int input;
scanf("%d", &input);
當它要求一個 int 時,在此處輸入 '/' 會導致未定義的行為!
相反,你必須讓輸入是一個字符串(類型char *
),檢查是否該字符串等於(“/”)手動或通過strncmp(input, "/", 1)
檢查它是否表示一個整數,然后如果您的輸入有效且不等於“/”,則使用strtol(input, NULL, 10)
創建另一個 int 值以轉換為 int。
可能會涉及錯誤檢查(不幸的是),例如處理外來字符,並驗證您的數字是否采用正則表達式 -?(\\d)(數字字符串前的單個可選減號)的形式。
您應該將%c
用於單個字符或%s
用於字符串, %d
正在尋找一個數字。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.