自定义函数时为什么不能用scanf
时间: 2023-05-29 08:02:47 浏览: 74
在自定义函数时不能使用scanf是因为scanf是一个标准输入函数,而自定义函数的参数应该在函数被调用时已经确定了,因此需要使用预定义的参数列表作为输入,而不是从标准输入流中获取输入。此外,scanf函数也不够灵活,因为它假设用户会按照特定格式输入数据,而自定义函数应该更具通用性,能够接受不同类型的输入。因此,在自定义函数中通常使用参数列表或其他输入方式来获取函数的输入。
相关问题
用c语言包含scanf函数且使用自定义函数实现:输入15个学生成绩,打印出不及格学生的学号及成绩,学号为输入顺序号
好的,以下是使用 C 语言实现的代码:
```c
#include <stdio.h>
// 自定义函数,用于打印不及格学生的学号及成绩
void print_failed_students(int scores[], int n) {
for (int i = 0; i < n; i++) {
if (scores[i] < 60) {
printf("学号%d,成绩%d\n", i+1, scores[i]);
}
}
}
int main() {
int scores[15]; // 定义一个长度为 15 的整型数组
printf("请输入15个学生成绩:\n");
for (int i = 0; i < 15; i++) {
scanf("%d", &scores[i]); // 读取输入的成绩并存储到数组中
}
print_failed_students(scores, 15); // 调用自定义函数打印不及格学生的信息
return 0;
}
```
解释一下代码:
- `print_failed_students` 函数和之前的实现是一样的。
- 在 `main` 函数中,首先定义一个长度为 15 的整型数组 `scores`,用于存储输入的学生成绩。
- 然后使用 `for` 循环读取输入的成绩,并存储到数组中。
- 最后调用自定义函数 `print_failed_students` 打印不及格学生的信息。
如果将上述代码保存到一个名为 `main.c` 的文件中,可以使用编译器编译并运行该程序来测试实现效果:
```
$ gcc main.c -o main
$ ./main
请输入15个学生成绩:
80 55 70 90 45 78 61 59 81 88 67 73 92 58 76
学号2,成绩55
学号5,成绩45
学号8,成绩59
学号14,成绩58
```
希望该程序不使用自定义的函数
好的,下面是不使用自定义函数的版本:
```c
#include <stdio.h>
int main()
{
int year, month, day, dow, i;
while (1) {
printf("请输入年月日(如2022 12 31):");
scanf("%d %d %d", &year, &month, &day);
if (year == 0) {
printf("程序结束。\n");
break;
}
if (year < 1900 || year > 2100) {
printf("年份不在范围内(1900-2100),请重新输入。\n");
continue;
}
if (month < 1 || month > 12) {
printf("月份不正确,请重新输入。\n");
continue;
}
if (day < 1 || day > 31) {
printf("日期不正确,请重新输入。\n");
continue;
}
// 判断每个月的天数是否正确
if (month == 2) {
if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) { // 闰年
if (day > 29) {
printf("日期不正确,请重新输入。\n");
continue;
}
} else { // 非闰年
if (day > 28) {
printf("日期不正确,请重新输入。\n");
continue;
}
}
} else if (month == 4 || month == 6 || month == 9 || month == 11) {
if (day > 30) {
printf("日期不正确,请重新输入。\n");
continue;
}
}
dow = 1; // 1900/01/01是星期一
for (i = 1900; i < year; i++) {
if (i % 4 == 0 && i % 100 != 0 || i % 400 == 0) { // 闰年
dow += 366;
} else { // 非闰年
dow += 365;
}
}
for (i = 1; i < month; i++) {
switch (i) {
case 2:
if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) { // 闰年
dow += 29;
} else { // 非闰年
dow += 28;
}
break;
case 4:
case 6:
case 9:
case 11:
dow += 30;
break;
default:
dow += 31;
break;
}
}
dow += day - 1; // 1900/01/01是星期一,所以要减1
dow %= 7;
switch (dow) {
case 0:
printf("%d年%d月%d日是星期日。\n", year, month, day);
break;
case 1:
printf("%d年%d月%d日是星期一。\n", year, month, day);
break;
case 2:
printf("%d年%d月%d日是星期二。\n", year, month, day);
break;
case 3:
printf("%d年%d月%d日是星期三。\n", year, month, day);
break;
case 4:
printf("%d年%d月%d日是星期四。\n", year, month, day);
break;
case 5:
printf("%d年%d月%d日是星期五。\n", year, month, day);
break;
case 6:
printf("%d年%d月%d日是星期六。\n", year, month, day);
break;
}
}
return 0;
}
```
这个版本的程序没有使用自定义函数,而是直接在主函数中进行了计算。程序中对输入的年月日进行了合法性检查,如果不合法则提示错误并重新输入。