如何用C语言中的gets函数获取用户输入的十个整数,并计算其中所有非负数的和?
时间: 2024-12-20 22:18:08 浏览: 17
在C语言中,`gets()` 函数已经不是一个安全的选择,因为它存在缓冲区溢出的问题。现在推荐使用更安全的 `fgets()` 函数或者`scanf()`函数。为了获取用户输入的十个整数并计算非负数之和,可以这样做:
1. 首先,声明一个数组来存储这十个整数,以及一个变量来追踪总和(初始化为0)。
2. 使用循环结构(如for循环),设置最大迭代次数为10次,因为最多只能接受10个整数。
3. 使用`scanf()`函数,每次尝试读取一个整数,如果输入的是非数字字符,程序将停止读取当前行。
4. 检查输入的整数是否是非负数,如果是,将其加到总和上。
下面是一个简单的示例:
```c
#include <stdio.h>
int main() {
int numbers[10], sum = 0;
for (int i = 0; i < 10; i++) {
char input[50];
fgets(input, sizeof(input), stdin);
if (sscanf(input, "%d", &numbers[i]) == 1) { // sscanf用于安全地从字符串中解析整数
if (numbers[i] >= 0) {
sum += numbers[i];
}
} else {
printf("Invalid input, please enter an integer.\n");
break; // 如果无法解析为整数,则退出循环
}
}
printf("The sum of non-negative numbers is: %d\n", sum);
return 0;
}
```
注意,此示例假设用户会在一行内输入一个整数,如果没有换行符,`fgets()`会包含换行。此外,由于`fgets()`和`scanf()`都不检查输入长度,因此可能存在数据溢出的风险。在实际生产环境中,更好的做法可能是使用`fgets()`读取整个输入行,然后使用`strtol()`或其他工具处理整数转换。
阅读全文