在 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 类型并再次跳过此字符,此循环继续导致无限循环。

您应该对单个字符使用 %c 或对字符串使用 %s%d 寻找数字。

关于 while 循环内的输入类型错误:

int input;
scanf("%d", &input);

在此处输入“/”会导致 undefined 请求 int 时的行为!

相反,你必须让输入是一个字符串(类型char *),检查字符串是否等于('/') 手动或通过 strncmp(input, "/", 1),检查它是否表示整数,然后创建 另一个 int 值 使用 strtol(input, NULL, 10) 转换为 int 如果您输入有效且不等于“/”。

可能会涉及错误检查(不幸的是),例如处理外来字符,以及验证您的号码是否采用正则表达式 -?(\d)(数字字符串前的单个可选减号)的形式。