c - 如何退出“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;
}
}
解决方案
保留来自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 函数返回分配的输入项的数量,如果出现早期匹配失败,该数量可能少于提供的数量,甚至为零。
推荐阅读
- c# - 如何在 Swagger 中为 .Net Core 使用 @ApiImplicitParams?
- vue.js - GSAP:无法读取未定义的属性“样式”
- intellij-idea - 字符串比较挂在 IntelliJ 中用于大字符串
- python - ValueError:张量的形状 (26, 400) 与提供的形状 [26, 200] 不兼容
- r - 为不同的热图保持热图颜色范围相同
- c++ - 限制 Concurrency::parallel_for 中使用的线程数
- http - 如何阻止 ReverseProxy 代理请求
- android - 实施 Kapt 在自动生成的改造文件中导致构建错误
- c# - Swagger (Swashbuckle) - 如何在端点下添加文本
- python - 在 Python 中编写一个“棋盘”函数,打印出请求的二进制长度