c - 为什么代码打印与获取字符一样多
问题描述
这是代码
#include <stdio.h>
int main()
{
int num1 = 0, num2 = 0, num3 = 0, num4 = 0;
do
{
printf("choose 4 numbers, you dont need space\n");
scanf("%1d%1d%1d%1d", &num1, &num2, &num3, &num4);
if(!num1 || !num2 || !num3 || !num4)
{
getchar();
}
}
while (num1 != num2 || num1 != num3 || num1 != num4 ||
num2 != num3 || num2 != num4 || num3 != num4);
}
我不知道该怎么办。
例如,如果输入是。*/*-
那么输出是:
choose 4 numbers, you dont need space
choose 4 numbers, you dont need space
choose 4 numbers, you dont need space
choose 4 numbers, you dont need space
解决方案
您的代码的行为与您描述的一样,因为scanf
当无法进行转换时,该函数不会触及读取缓冲区。在循环中调用函数将尝试将下一个字符读取为%d
.
输入非数字序列永远不会按预期停止您的代码。因此,您应该检查 的返回值scanf
以检测错误输入。
推荐阅读
- python - 建模中的字符串变量
- postgresql - TimescaleDB 连续聚合和 Postgis
- vue.js - Navbar Toggler Bootstrap with VueJS - 在点击外部指令时关闭
- xml - XML 模式设计:在不违反唯一粒子属性的情况下选择相似序列?
- type-conversion - conv_integer() 与 to_integer()
- python - 不知道如何修复我的洗牌和交易的错误 python 程序 IndexError: list index out of range cant figgur
- c++ - 纹理不会出现 FreeGLUT
- node.js - NodeJs / Mongo:在模型中添加新文件
- rust - include_bytes 的运行时成本是多少!或include_str?
- r - 如何使用 R 获取括号/括号中的数字