C语言中scanf函数的问题

2024-11-30 00:10:28
推荐回答(3个)
回答1:

#include
main()
{
float grade[5][4]; /*无需赋值*/
int row,colum; /*无需赋值*/
for(row=0;row<5;row++) /*row的极限为5*/
{
printf("please input NO.%d's grades(Math/C/Dbase):",row+1);
for(colum=0;;colum++)
if(colum<4) /*colum的极限为4*/
scanf("%f",&grade[row][colum]);
else
break;
}
printf("All data have got in.\n");
return 0;
}

/*在ANSI中定义的主函数
#include
#include
int main(void)
{
代码
getch(); /*部份编译器需要加getch()来显示结果*/
return 0;
}
*/
#include
#include /*getch()语句需要用到的头文件*/
int main(void)
{
float grade[5][4];
int row,colum;
for(row=0;row<5;row++)
{
printf("please input NO.%d's grades(Math/C/Dbase):",row+1);
for(colum=0;;colum++)
if(colum<4)
scanf("%f",&grade[row][colum]);
else
break;
}
printf("All data have got in.\n");
getch();
return 0;
}

回答2:

这种问题是,没有赋初值时,在你开辟的存储空间
grade[5][4]其存储空间中的值并未初始化(还保留上次计算值)
在进行scanf读入时%f类型与未初始化前类型不一致,导致出错。
赋值初始化后类型一致即可以执行,如果你重启计算机再执行第一个程序
也许就可以了。

回答3:

不赋初值是在声明,赋初值是在定义。如果只是声明的话,出于于效率上的考虑,编译阶段并没有连接浮点运算库。因此会出错。而定义就不同啦,定义的话,编译器会在自动连接浮点运算库。你可能使用了比较老的编译器吧。
建议你以后这样写main函数:
int main(void)
{
//your code
return 0;
}
或者
int main(int argc, char *argv[])
{
//
return 0;
}

初始化是个好习惯,建议养成