#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]);
}
}
以下是接受学生数据,名字姓氏然后得分的代码。
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]);
}
}
- 您应该使用
int main()
而不是void main
- 当你使用你应该
scanf("%d",&entry)
而不是scanf("%d",entry)
,SCANF需要的是一个地址。 - 你不应该使用
gets()
,这很危险,试试fgets()
scanf("%d",entry); //scanf("%d",&entry)
char ent[entry][100000]; //error
当你在编译时无法知道数组的长度时,你应该使用 malloc
来获取数组
错误在于 scanf 使用 scanf("%d",&entry)
而不是 scanf("%d",entry);
建议:使用 int
作为main
的返回类型