C语言中scanf函数的问题

/*Purpose:a system used for managing students' grades*/
/*Date:30/7/2010*/

# include<stdio.h>
main()
{
float grade[5][4];
int row=0,colum=0;

for(row=0;row<4;row++)
{
printf("please input NO.%d's grades(Math/C/Dbase):",row+1);
for(colum=0;;colum++)
if(colum<3)
scanf("%f",&grade[row][colum]);
else
break;

}
printf("All data have got in.\n");

return 0;
}

编译能够通过,在运行时等输入数据回车后,系统提示错误!而当我将其改为:
/*Purpose:a system used for managing students' grades*/
/*Date:30/7/2010*/

# include<stdio.h>
main()
{
float grade[5][4]={0}; //注意,我在这里给数组赋初值
int row=0,colum=0;

for(row=0;row<4;row++)
{
printf("please input NO.%d's grades(Math/C/Dbase):",row+1);
for(colum=0;;colum++)
if(colum<3)
scanf("%f",&grade[row][colum]);
else
break;

}
printf("All data have got in.\n");

return 0;
}
却又可以正常运行了,这是说明原因呢?谁能帮我解答一下,谢啦

#include<stdio.h>
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<stdio.h>
#include<conio.h>
int main(void)
{
代码
getch(); /*部份编译器需要加getch()来显示结果*/
return 0;
}
*/
#include<stdio.h>
#include<conio.h> /*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;
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2010-08-02
这种问题是,没有赋初值时,在你开辟的存储空间
grade[5][4]其存储空间中的值并未初始化(还保留上次计算值)
在进行scanf读入时%f类型与未初始化前类型不一致,导致出错。
赋值初始化后类型一致即可以执行,如果你重启计算机再执行第一个程序
也许就可以了。
第2个回答  2010-08-08
不赋初值是在声明,赋初值是在定义。如果只是声明的话,出于于效率上的考虑,编译阶段并没有连接浮点运算库。因此会出错。而定义就不同啦,定义的话,编译器会在自动连接浮点运算库。你可能使用了比较老的编译器吧。
建议你以后这样写main函数:
int main(void)
{
//your code
return 0;
}
或者
int main(int argc, char *argv[])
{
//
return 0;
}

初始化是个好习惯,建议养成
相似回答