我正在制作一个用户输入等级(1到5)的程序,然后将等级添加到数组中以供以后检查。当用户输入字母“s”时,程序关闭。当我的程序运行崩溃时,为什么?
#include <stdio.h>
#include <stdlib.h>
int i;
int grade[50];
char *num[20];
int enter();
int enter()
{
for (i=0; i<10; i++) {
printf("\nEnter grade:\nPress [s] to close program\n");
scanf("%s",&num[i]);
if (strcmp(num[i],"s") == 0) {
break;
} else {
grade[i] = atoi(num[i]);
}
}
}
int main()
{
enter();
for (i=0; i<10; i++) {
printf("\n%d",grade[i]);
}
return 0;
}
答案 0 :(得分:1)
从num [20]声明中删除'*',因为您声明了20个字符串指针,因此读取和比较num [i]的值将导致错误。 此外,你只需要一个简单的字符串来获得成绩。
答案 1 :(得分:0)
程序崩溃的原因是num
是指针数组,num
的元素不能指向用于存储您输入的字符串的有效内存。
您可以将char *num[10]
更改为char num[10][12]
和&#39; scanf(&#34;%s&#34;,&amp; num [i])to scanf("%s", num[i])
,并确保一切正常
当然,您可以使用malloc
为num
中的每个元素动态分配内存,例如:
`for(i = 0; i < 10; i ++){
num[i] = (char*)malloc(sizeof(char) * 12);
}
`
即便如此,您必须将scanf("%s", &num[i])
更改为scanf("%s", num[i])
;
最后,你不能忘记释放你只是动态malloc的记忆。