首页 > 解决方案 > 如何退出“do-while”循环?

问题描述

我想知道在不使用 EOF 或其他数字的情况下退出 do-while 循环的最佳方法是什么。
有没有办法输入一个字符,以便用户可以退出循环?
我试过写printf("Enter a number ('x' to exit):,但它不起作用。
你知道另一种方法吗?
我不能使用 EOF,否则程序不会将 -1 计为数字,而数字 -1 将专门用于退出循环。

#include <stdio.h>

int even(int number);

int main(){
    int n;
    do{
        printf("Enter an integer (x to terminate): ");
        scanf("%d", &n);
        if(n=='x'){
            break;
        }
        printf("%d\n", even(n));
    }while(n!='x');
    return 0;
}

int even(int number){
    if(number%2==0){
        return 1;
    }else{
        return 0;
    }
}

标签: c

解决方案


保留来自scanf()like in的返回值

 int scanreturn=0;
 /* ... */
 scanreturn= scanf("%d", &n);

然后将其用作 do-while 的条件

}while (scanreturn == 1);

这是有效的,因为scanf()返回成功扫描的输入字段的数量。
只要成功扫描了一个整数,那将是 1。
当输入“x”或任何看起来不像整数的东西时,循环将结束。

比较https://en.cppreference.com/w/c/io/fscanf

返回值:
成功分配的接收参数的数量(如果在分配第一个接收参数之前发生匹配失败,则可能为零),如果在分配第一个接收参数之前发生输入失败,则返回 EOF。

或引用 C 标准 7.21.6.4,例如http://port70.net/~nsz/c/c11/n1570.html#7.21.6.4

... scanf 函数返回分配的输入项的数量,如果出现早期匹配失败,该数量可能少于提供的数量,甚至为零。


推荐阅读