#include<stdio.h>
#include<string.h>
void main()
{
int entry,i;
printf("\nPlease indicate the number of records you want to enter :\n");
scanf("%d",entry);
char ent[entry][100000];
printf("\nPlease input records of students (enter a new line after each record), with following format first name last name score \n");
for(i=0;i<entry;i++)
{
gets(ent[i]);
printf("%s",ent[i]);
}
}
以下是接受学生数据,名字姓氏然后得分的代码。
答案 0 :(得分:2)
main
应该返回int
,而不是void
。
int main(void) {
/* ... */
}
scanf("%d",entry);
scanf
期望与"%d"
格式说明符对应的参数为int *
。但是,你的论点是int
。也许你的意思是:
scanf("%d",&entry);
就此而言,您应该检查scanf
的返回值。就你所知,用户没有输入任何数字。
if (scanf("%d", &entry) != 1) {
exit(0);
}
实际上,这仍然允许用户输入负数。你有没有见过一系列负数的项目?对我来说似乎也很奇怪...我认为size_t
比int
更合适(因此,您需要使用%zu
格式说明符)。 ..
最后但并非最不重要的是,gets
已被弃用,因为它无法阻止用户溢出缓冲区,这可能会导致段错误。
#include <stdio.h>
#include <string.h>
int main(void)
{
size_t entry;
printf("\nPlease indicate the number of records you want to enter :\n");
if (scanf("%zu",&entry) != 1)
{
exit(0);
}
char ent[entry][100000];
printf("\nPlease input records of students (enter a new line after each record), with following format first name last name score \n");
for(size_t i=0; i<entry; i++)
{
fgets(ent[i], sizeof ent[i], stdin);
printf("%s",ent[i]);
}
}
答案 1 :(得分:1)
int main()
代替void main
scanf("%d",&entry)
代替scanf("%d",entry)
,扫描需要的是一个地址。gets()
,这很危险,请尝试fgets()
答案 2 :(得分:1)
scanf("%d",entry); //scanf("%d",&entry)
char ent[entry][100000]; //error
在编译时无法知道数组的长度时,应使用malloc
来获取数组
答案 3 :(得分:0)
错误在scanf中使用scanf("%d",&entry)
而不是scanf("%d",entry);
建议:使用int
作为main