报错scanf("%s", stu.num);无法运行
时间: 2023-11-27 14:47:08 浏览: 76
以下是关于报错scanf("%s", stu.num);无法运行的解释和演示:
1. 报错原因是因为scanf函数中的%s格式化字符串对应的是一个字符数组,而stu.num可能是一个字符指针,导致无法正确运行。正确的写法应该是使用scanf_s函数。
```c
char a[10];
scanf_s("%s", a, 9);
printf("键盘上输入的字符串是:%s\n", a);
```
2. sizeof操作符可以用来获取变量、常量或数据类型所占的字节数。它有几种形式,包括sizeof( 变量\常量 )、sizeof( 数据类型 )等。
```c
sizeof(10);
char c = 'a';
sizeof(c);
sizeof(float);
```
相关问题
#include<stdio.h> struct student { *学生信息结构定义* int num; 冰学号* char name[10]; 冰姓名* intcomputer,english,math;1*三门课程成繢*/ double average; *个人平均成绩*/ }; int main() int i, n; struct student stu,max; 冰定义结构变量* printf ("Input n: "); scanf ("%d", &n); printf ("Input the student's number, name and course scores\n"); for (i = 1; i <= n; i++){ printf ("No.%d: ", i); scanf %d".&stu.num,stu.name,&stu.math,&stu.english,&stu.computer); stu.average = (stu.math + stu.english + stu.computer) / 3.0; if (i == 1){ max = stu; 冰结构变量赋值*/ Felseif(max.average<stu.average){ max = stu; ["%d%5%d%d 冰结构变量赋值*/ Felseif(max.average<stu.average){ max = stu; ["%d%5%d%d printf("num:%d, max.average); return 0; name:%5, average:%.2Ifn", max.num, max.name, ) return 0; }向这个代码里面添加查询和修改功能
要添加查询和修改功能,需要在主函数中添加相应的代码。下面是修改后的代码:
```c
#include <stdio.h>
#include <string.h>
struct student {
int num; // 学号
char name[10]; // 姓名
int computer; // 计算机成绩
int english; // 英语成绩
int math; // 数学成绩
double average; // 平均成绩
};
int main() {
int i, n, choice, num;
struct student stu, max = {0};
printf("Input n: ");
scanf("%d", &n);
printf("Input the student's number, name and course scores\n");
for (i = 1; i <= n; i++) {
printf("No.%d: ", i);
scanf("%d%s%d%d%d", &stu.num, stu.name, &stu.math, &stu.english, &stu.computer);
stu.average = (stu.math + stu.english + stu.computer) / 3.0;
if (i == 1) {
max = stu;
} else if (max.average < stu.average) {
max = stu;
}
}
printf("num:%d, name:%s, average:%.2f\n", max.num, max.name, max.average);
// 添加查询和修改功能
printf("Enter 1 to query a student's information, 2 to modify a student's information: ");
scanf("%d", &choice);
if (choice == 1) {
printf("Enter the student's number: ");
scanf("%d", &num);
for (i = 1; i <= n; i++) {
printf("No.%d: ", i);
scanf("%d%s%d%d%d", &stu.num, stu.name, &stu.math, &stu.english, &stu.computer);
stu.average = (stu.math + stu.english + stu.computer) / 3.0;
if (stu.num == num) {
printf("num:%d, name:%s, math:%d, english:%d, computer:%d, average:%.2f\n", stu.num, stu.name, stu.math, stu.english, stu.computer, stu.average);
break;
}
}
if (i > n) {
printf("Student not found.\n");
}
} else if (choice == 2) {
printf("Enter the student's number: ");
scanf("%d", &num);
for (i = 1; i <= n; i++) {
printf("No.%d: ", i);
scanf("%d%s%d%d%d", &stu.num, stu.name, &stu.math, &stu.english, &stu.computer);
stu.average = (stu.math + stu.english + stu.computer) / 3.0;
if (stu.num == num) {
printf("Enter the new information:\n");
scanf("%d%s%d%d%d", &stu.num, stu.name, &stu.math, &stu.english, &stu.computer);
stu.average = (stu.math + stu.english + stu.computer) / 3.0;
printf("num:%d, name:%s, math:%d, english:%d, computer:%d, average:%.2f\n", stu.num, stu.name, stu.math, stu.english, stu.computer, stu.average);
break;
}
}
if (i > n) {
printf("Student not found.\n");
}
} else {
printf("Invalid choice.\n");
}
return 0;
}
```
在上面的代码中,我们添加了一个 `choice` 变量,用于选择查询或修改功能。当用户选择查询时,我们需要再次输入要查询的学生的学号,然后遍历学生数组,找到对应学号的学生,输出其信息。当用户选择修改时,我们也需要输入要修改的学生的学号,然后遍历学生数组,找到对应学号的学生,再次输入该学生的信息,更新结构体中的信息。如果找不到对应学号的学生,输出相应的错误信息。
while (!feof(fp1)) { Student student; fscanf(fp1, "%s %s %s %s %s %f %f %f\n", student.stu_id, student.name, student.sex, student.birthdate, student.phone_num, &student.english, &student.math, &student.total); if (strcmp(student.stu_id, stu_id) == 0) { printf("请输入修改后的信息:\n"); printf("输入学号:"); scanf("%s", &student.stu_id); printf("输入姓名:"); scanf("%s", &student.name); printf("输入性别:"); scanf("%s", &student.sex); printf("输入出生年月:"); scanf("%s", &student.birthdate); printf("输入电话号码:"); scanf("%s", &student.phone_num); printf("输入英语成绩:"); scanf("%f", &student.english); printf("输入数学成绩:"); scanf("%f", &student.math); student.total = student.english + student.math; fprintf(fp2, "%s %s %s %s %s %.2f %.2f %.2f\n", student.stu_id, student.name, student.sex, student.birthdate, student.phone_num, student.english, student.math, student.total); printf("修改成功!\n"); flag = 1; } else { fprintf(fp2, "%s %s %s %s %s %.2f %.2f %.2f\n", student.stu_id, student.name, student.sex, student.birthdate, student.phone_num, student.english, student.math, student.total); } }
这段代码是一个从文件中读取学生信息、修改指定学生信息并将修改后的结果写入到另一个文件中的程序。
程序的执行流程如下:
1. 打开一个名为 fp1 的文件指针,用于读取学生信息。
2. 进入一个 while 循环,判断文件指针是否已经指向文件的末尾。
3. 如果文件指针不在文件末尾,则从文件中读取一条学生信息。
4. 判断当前读取的学生信息是否为要修改的学生信息,如果是则提示用户输入修改后的信息,并将修改后的结果写入到另一个名为 fp2 的文件中。
5. 如果当前读取的学生信息不是要修改的学生信息,则将该学生信息直接写入到 fp2 文件中。
6. 如果在整个文件中都没有找到要修改的学生信息,则输出 "未找到该学生信息!" 的提示信息。
7. 关闭文件指针 fp1 和 fp2。
需要注意的是,这段程序中使用了两个文件指针,其中一个用于读取学生信息,另一个用于将修改后的结果写入到文件中。同时,程序中也使用了结构体来存储学生信息,方便对学生信息进行修改和输出。
阅读全文