输入"/"退出 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 numbern");
    printf("Enter '/' to exit.n");
    printf("======================nn");
    while(!quit) {
        printf("Input: ");
        int input;
        scanf("%d", &input);
        if (input == '/')
            quit = 1; // Suppose to exit when input = '/'
        else 
            show(input);
        printf("nn");
    }
}
void show(int n) {
    for (int i=1; i<=n; i++)
        printf("*");
}

您在while循环内部的输入类型有错误:

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

在此处输入'/'导致行为要求INT!

相反,您必须让输入为 String (键入 char *(, check 是手动还是通过strncmp(input, "/", 1)等于字符串('/'(如果它代表整数,然后使用strtol(input, NULL, 10)创建另一个int value 如果输入是有效的,并且不等于'/'.

,则将其转换为int。

可能会涉及错误检查(不幸的是(,例如处理外部字符,并验证您的号码以REGEX的形式 - ?( d((数字字符串之前的单个可选减符号(。

<</p>

scanf中的%d期望int数据类型。输入'/'时,它会跳过'/'并查找int数据类型。它一无所获,此''留在缓冲区中。在下一个迭代中,它找到了相同的char类型,然后再次跳过此字符,并且该周期继续引起无限环路。

如果要与'/'进行比较,则应使用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);

您应该将%c用于单个字符或%s用于字符串,%d正在寻找一个数字。

相关内容

  • 没有找到相关文章

最新更新