这段代码为什么出错#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<string.h> int main() { int i = 0; int q = 0; char ch; printf("请输入"); while(scanf("%d", &i) == 1) { q += i; while ((ch = getchar()) == "") ; if (ch == "\n") { break; } ungetc(ch, stdin); } printf("结果是:%d", q); printf("\n"); //system("pause"); return 0; }
时间: 2024-01-17 18:04:51 浏览: 284
这段代码存在以下问题:
1. 宏定义 `_CRT_SECURE_NO_WARNINGS` 是为了禁用 Visual Studio 的编译器警告,但是在其他编译器中可能不被支持。
2. 在 while 循环中,当输入非数字字符时,getchar() 函数得到的是字符,而不是字符串,因此 if (ch == "\n") 判断条件无法成立,应该改为 if (ch == '\n')。
3. 在 while 循环中,当输入非数字字符时,应该通过 getchar() 函数将其从缓冲区中清除,而不是使用 ungetc() 函数将其放回到缓冲区中。可以使用一个 while 循环来清除缓冲区中的非数字字符,例如:
```
while ((ch = getchar()) != '\n' && ch != EOF)
;
```
因此,应该将代码改为:
```
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
int i = 0;
int q = 0;
char ch;
printf("请输入");
while (scanf("%d", &i) == 1)
{
q += i;
while ((ch = getchar()) != '\n' && ch != EOF)
;
if (ch == '\n')
{
break;
}
}
printf("结果是:%d\n", q);
return 0;
}
```
阅读全文