以下代码有错误,多打印了Invalid input. Please input a positive integer greater than 1:#include <stdio.h> int Fun(int m); int main() { int num; printf("Please input a number:\n"); while (scanf("%d", &num) != 1 || num <= 1) { printf("Invalid input. Please input a positive integer greater than 1:\n"); while (getchar() != '\n'); getchar(); // 读取并丢弃输入缓冲区中的换行符 } if (Fun(num)) { printf("%d is a prime number\n", num); } else { printf("%d is not a prime number\n", num); } return 0; } int Fun(int m) { for (int i = 2; i * i <= m; i++) { if (m % i == 0) { return 0; } } return 1; }
时间: 2024-01-13 14:02:25 浏览: 147
stdint.h和inttypes.h头文件
抱歉,我又犯了一个错误。这个问题是因为在输入不合法的情况下,程序使用 `getchar()` 函数将输入缓冲区中的字符读取并丢弃,但有时候会读取到多余的字符,比如空格或者制表符,导致后续的输入检查始终失败。为了解决这个问题,我们可以在 `scanf()` 函数中添加一个忽略空白字符的修饰符 `%*[ \t]`,将输入缓冲区中的任何空格或制表符都读取并丢弃掉。以下是修改后的代码:
```c
#include <stdio.h>
int Fun(int m);
int main() {
int num;
printf("Please input a number:\n");
while (scanf("%d%*[ \t]", &num) != 1 || num <= 1) {
printf("Invalid input. Please input a positive integer greater than 1:\n");
while (getchar() != '\n');
}
if (Fun(num)) {
printf("%d is a prime number\n", num);
} else {
printf("%d is not a prime number\n", num);
}
return 0;
}
int Fun(int m) {
for (int i = 2; i * i <= m; i++) {
if (m % i == 0) {
return 0;
}
}
return 1;
}
```
现在,当输入不合法时,程序会使用 `%*[ \t]` 修饰符将输入缓冲区中的任何空格或制表符都读取并丢弃掉,确保程序可以正确地等待用户重新输入。
阅读全文