我正在尝试将学生的姓名保存在字符数组中并打印第一个学生的姓名,但我的代码不起作用。我正在练习C,所以我自己编写随机程序并需要帮助。我的代码生成以下错误:
format '%s' expects argument of type 'char *', but argument 2 has type 'int'
我对C.很新。任何人都可以帮忙吗?
代码:
#include <stdio.h>
#include <string.h>
main(){
char StudentsName[100];
float StudentsGrades[100];
int NumStudents, i, j;
printf("How many students you want to process? ");
scanf("%d", &NumStudents);
if(NumStudents > 15){goto skip_lines_grades;}
for(i=0; i<NumStudents; i++){
printf("\n Write the name of the student: ");
scanf("%s", &StudentsName[i]);
}
//Prints First Student, I'M GETTING THE ERROR HERE, WHY?
printf("%s", StudentsName[0]);
goto skip_last_msg;
skip_lines_grades:;
printf("We can process 15 students for now, try again.");
skip_last_msg:;
}
答案 0 :(得分:0)
我希望你从上面的讨论中得到基本的想法。总而言之,您需要定义一个包含100个字符变量的数组。
此外,对于您的错误,对于char StudentsName[100];
,StudentsName[0]
表示char
所期望的第一个%s
变量值,而不是地址。所以,你的编译器是对的。如果您需要打印char
,则需要使用%c
说明符。但是,考虑到您的程序逻辑,这也是错误的。
要纠正,您可以
分配一个char [100]
类型的数组,以容纳多个学生的数据。
动态分配内存。
循环以获取每个学生的输入。
打印输出。
释放分配的内存。
检查修改后的代码,其解释清楚。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define NAMESIZ 128
int main(){
char *StudentsName[100]; //notice here
float StudentsGrades[100];
int NumStudents, i, j;
printf("How many students you want to process? ");
scanf("%d", &NumStudents);
if(NumStudents > 15){goto skip_lines_grades;}
for(i=0; i<NumStudents; i++){
StudentsName[i] = malloc(NAMESIZ); //notice here
printf("\n Write the name of the student: ");
scanf("%s", StudentsName[i]); //notice here
}
//for(i=0; i<NumStudents; i++) //uncomment to print all student data
i = 0; //comment out to print all student data
printf("Student [%d] is %s\n", (i+1), StudentsName[i]);
for(i=0; i<NumStudents; i++)
free (StudentsName[i]); //notice here
goto skip_last_msg;
skip_lines_grades:;
printf("We can process 15 students for now, try again.");
skip_last_msg:;
}