我无法使用scanf将名称输入到char数组中
我无法使用scanf在stdnames数组中输入名称。 编译时没有错误,但只要输入名称和 然后按enter键写入另一个名称,它将显示错误并关闭程序。 我该怎么做呢我无法使用scanf将名称输入到char数组中,c,arrays,for-loop,char,scanf,C,Arrays,For Loop,Char,Scanf,我无法使用scanf在stdnames数组中输入名称。 编译时没有错误,但只要输入名称和 然后按enter键写入另一个名称,它将显示错误并关闭程序。 我该怎么做呢 int main(int argc, char* argv[]) { float marks[50]; /*char *stdnames[100]={"Arvind Thillainathan","Robert Lang"};*/ //I want to stores names like the above one c
int main(int argc, char* argv[])
{
float marks[50];
/*char *stdnames[100]={"Arvind Thillainathan","Robert Lang"};*/
//I want to stores names like the above one
char *stdnames[100];
int totalNames = 0;
int i = 0, w=0,h=0;
printf("How many names do you want to enter ??\n");
scanf("%d",&totalNames);
assert(totalNames != 0);
for(int count = 0; count < totalNames; count++)
{
printf("Enter name of student\n");
scanf("%s",stdnames[count]);
//From here the problem starts
}
getres(marks,totalNames);
for(i = 0; i < totalNames; i++)
{
int v = 1;
printf("\n");
printf("IELTS Marks of %s\n\n",stdnames[i]);
for(h = w; h < w+5; h++)
{
if(v==1)
{
printf("Listening : %0.1f\n", marks[h]);
}
else if(v==2)
{
printf("Reading : %0.1f\n", marks[h]);
}
else if(v==3)
{
printf("Writing : %0.1f\n", marks[h]);
}
else if(v==4)
{
printf("Speaking : %0.1f\n", marks[h]);
}
else
{
printf("Overall : %0.1f\n\n", marks[h]);
}
v++;
//if(h==10)
//{
// break;
//}
}
w+=5;
}
return 0;
}
intmain(intargc,char*argv[])
{
浮标[50];
/*char*stdnames[100]={“Arvind Thillainathan”,“Robert Lang”}*/
//我想储存像上面那样的名字
char*stdnames[100];
int totalNames=0;
int i=0,w=0,h=0;
printf(“您想输入多少个名称?”\n);
scanf(“%d”、&totalNames);
断言(totalNames!=0);
对于(int count=0;count
作者
您得到了一个数组(指向char的指针)下一个大问题是 谁将为每个指针分配内存 一个小的答案是——你必须像下面这样自己做:
stdnames[count]=malloc(100*sizeof(char)); // You may replace 100 with desired size
或
您需要将此行放在scanf
语句之前注意:一旦这些变量变得不相关,不要忘记释放分配的内存。像这样做:
free(stdnames[count]);
您正在扫描未分配的对象
stdnames[count]
。也许可以先尝试在那里分配一些内存,比如说malloc
代码>当你有char*stdnames[100]代码>虽然输入标记的循环有点模糊。没有“字符数组”。你是指指向“<代码> char < /c> >的数组指针?@ AvnDead Dister-TyelaaNe:考虑代码中的<代码> GETES(标记,总名)的定义。而且sizeof(char)
是无用的,因为它除了1
@Olaf:也伤害了我之外,永远不会产生其他东西。改变:DThanks(对我来说还是有点太吵了,但我能忍受——无论如何都得读Word文档和PPT)。内容还有其他问题。嗯,这是正确的(与类型无关),但实际上我想知道为什么不删除这个词?@sjsam谢谢,它工作得很好。我刚开始C。malloc的确切目的是什么?
stdnames[count]=malloc(100); // sizeof(char) is almost always 1
free(stdnames[count]);