输入' /'退出c

时间:2018-04-04 07:40:43

标签: 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("*");
}

4 个答案:

答案 0 :(得分:1)

如果您想与'/'进行比较,则应使用char变量,而不是int。因此,使用"%c"作为scanf()的格式字符串。否则,scanf()将无法读取您的'/',因为它不是整数。

此代码段将具有您期望的行为:

while (!quit) {
    char input;
    scanf("%c", &input);
    if (input == '/')
        quit = 1;

如果你读了一个数字,那么你可以将048'0')的ASCII值减去你的char,这样你就会得到{ {1}}等价物:

int

答案 1 :(得分:1)

%d中的

scanf需要int数据类型。当您输入'/'时,它会跳过'/'并查找int数据类型。它什么也没找到,这个'\'留在缓冲区中。在下一次迭代中,它会找到相同的char类型并再次跳过此字符,这个循环继续导致无限循环。

答案 2 :(得分:1)

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

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

在此处输入'/'会导致未定义行为,因为它要求输入int!

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

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

答案 3 :(得分:0)

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