簡體   English   中英

在 C 中輸入“/”退出程序

[英]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;

如果您讀取一個數字,那么您可以將048'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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM