用c语言给出实现代码:循环输入整数( 若输入了小数出现死循环,该如何处理)
时间: 2023-06-23 11:07:57 浏览: 51
以下是一个循环输入整数的示例代码,同时也包含了处理输入小数的代码:
```c
#include <stdio.h>
int main() {
int num;
while (1) {
printf("请输入一个整数:");
if (scanf("%d", &num) != 1) { // 如果输入的不是整数,会返回0,此时需要清空输入缓冲区
scanf("%*s"); // %*s 表示读取一个字符串但是不存储
printf("输入了非整数,请重新输入!\n");
continue;
}
printf("您输入的整数是:%d\n", num);
// 这里可以进行其他操作
}
return 0;
}
```
在输入小数时,scanf 函数会读取小数点前后的数字,但是只会将整数部分存入 num 变量中,小数部分会留在输入缓冲区中。由于缓冲区中仍然有小数部分的内容,所以每次循环开始时,scanf 函数会再次读取到小数点前面的数字,因此会导致死循环。为了解决这个问题,我们需要在输入小数时清空输入缓冲区,让缓冲区中的小数部分被丢弃。具体方法是使用 %*s 格式控制符读取一个字符串,但是不存储它。这样就可以清空输入缓冲区了。
相关问题
用c语言编写代码:输入一个正整数n,输出该数的位数
好的,这个问题很简单。以下是C语言代码:
```
#include <stdio.h>
int main() {
int n;
printf("请输入一个正整数: ");
scanf("%d", &n);
int cnt = 0;
do {
cnt++;
n /= 10;
} while(n > 0);
printf("该数的位数为 %d\n", cnt);
return 0;
}
```
输入一个正整数n,程序将输出该数的位数。如果输入的数是0,则该数的位数为1。希望这个回答对您有所帮助!
用C语言完成循环结构习题:输入两个整数,输出它们的最大公约数
```c
#include <stdio.h>
int main()
{
int a, b, i, gcd;
printf("请输入两个整数:\n");
scanf("%d %d", &a, &b);
for(i = 1; i <= a && i <= b; ++i)
{
if(a % i == 0 && b % i == 0)
gcd = i;
}
printf("%d和%d的最大公约数是%d\n", a, b, gcd);
return 0;
}
```