user-0 提问: VS2013使用C编译数据类型，输入数据时出现的错误

回复:
user: user-1
content: 引用 4 楼 xian_wwq 的回复:[quote=引用 楼主 GGlance 的回复:]  中断设置在这里 执行以下操作，进行逐行调试 为什么在执行第一次输入循环以后就停止了？求大佬解答 #include<stdio.h> struct student { 	int num[5]; 	char name[10]; 	int score; }stu[5]; int main() { 	int i, j, k, l; 	//printf("input the number of the student\n"); 	//scanf_s("%d\n",&n); 	printf("input the  students's num,name,score\n"); 	for (l = 0; l < 5; l++) 	{ 		printf("input the  students's num:"); 		scanf_s("%5d", stu[l].num); 		printf("input the  students's name:"); 		scanf_s("%s",stu[l].name,10); 		printf("input the  students's score:"); 		scanf_s("%5d", stu[l].score,5); 		printf("\n"); 	} 	struct student temp; 	for (i = 0; i < 4; i++) 	{ 		k = i; 		for (j = 0; j < 5; j++) 		if (stu[j].score>stu[k].score) 			k = j; 		temp = stu[k]; stu[k] = stu[j]; stu[j] = temp; 	} 	for (i = 0; i < 5; i++) 		printf("%6d,%10s,%5f\n", stu[i].num, stu[i].name, stu[i].score); 	printf("\n"); 	return 0; }  scanf_s用法不对哦，  scanf_s("%5d", &stu[l].num);  注意这个“&”[/quote]  看得仔细

user: user-0
content: 引用 2 楼 自信男孩的回复:#include<stdio.h> struct student {     char num[5];   /*建议使用char类型*/     char name[10];     int score; }stu[5];  int main() {     int i, j, k, l;     //printf("input the number of the student\n");     //scanf_s("%d\n",&n);     printf("input the  students's num,name,score\n");     for (l = 0; l < 5; l++)     {         printf("input the  students's num:");         scanf_s("%s", stu[l].num, 5);    /*改一下，用%s*/         printf("input the  students's name:");         scanf_s("%s",stu[l].name,10);         printf("input the  students's score:");         scanf_s("%5d", stu[l].score,5);         printf("\n");     }     struct student temp;     for (i = 0; i < 4; i++)     {         k = i;         for (j = 0; j < 5; j++)             if (stu[j].score>stu[k].score)                 k = j;         if (k != i) {    /*当k != i时才要交换*/             temp = stu[k];             stu[k] = stu[i];             stu[i] = temp;         }     }     for (i = 0; i < 5; i++)         printf("%6s, %10s, %5d\n", stu[i].num, stu[i].name, stu[i].score);     printf("\n");      return 0; } 改了一下你的程序，排序有点问题。另外，num应该用char类型。 谢谢您的评论，我回去好好看看

user: user-0
content: 引用 2 楼 自信男孩的回复:#include<stdio.h> struct student {     char num[5];   /*建议使用char类型*/     char name[10];     int score; }stu[5];  int main() {     int i, j, k, l;     //printf("input the number of the student\n");     //scanf_s("%d\n",&n);     printf("input the  students's num,name,score\n");     for (l = 0; l < 5; l++)     {         printf("input the  students's num:");         scanf_s("%s", stu[l].num, 5);    /*改一下，用%s*/         printf("input the  students's name:");         scanf_s("%s",stu[l].name,10);         printf("input the  students's score:");         scanf_s("%5d", stu[l].score,5);         printf("\n");     }     struct student temp;     for (i = 0; i < 4; i++)     {         k = i;         for (j = 0; j < 5; j++)             if (stu[j].score>stu[k].score)                 k = j;         if (k != i) {    /*当k != i时才要交换*/             temp = stu[k];             stu[k] = stu[i];             stu[i] = temp;         }     }     for (i = 0; i < 5; i++)         printf("%6s, %10s, %5d\n", stu[i].num, stu[i].name, stu[i].score);     printf("\n");      return 0; } 改了一下你的程序，排序有点问题。另外，num应该用char类型。 谢谢大佬，我回去多看看算法，自己刚开始学，太笨了

user: user-0
content: 引用 1 楼 赵4老师的回复:崩溃的时候在弹出的对话框按相应按钮进入调试，按Alt+7键查看Call Stack即“调用堆栈”里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处，看不懂时双击下一行，直到能看懂为止。  printf里面的%和变量的一一对应关系 scanf里面的%和变量以及变量前加不加&的一一对应关系 是C代码中非常容易出错的地方，而且通常编译还不出错。 所以在编译源代码之前值得专门仔细检查一遍甚至多遍。  在每个最后不带\n的printf后面加fflush(stdout); 在每个不想受接收缓冲区旧内容影响的scanf前面加rewind(stdin); 另外请检查scanf的返回值。 //请今后要用 char c; scanf("%c",&c); //时，都改为 char s[2]; char c; scanf("%1s",s); c=s[0]; //自动跳过一个或多个空格或Tab字符或回车换行，读取下一个字符。 谢谢您，记住了。以后我多加注意

user: user-2
content: 引用 楼主 GGlance 的回复: 中断设置在这里 执行以下操作，进行逐行调试 为什么在执行第一次输入循环以后就停止了？求大佬解答 #include<stdio.h> struct student { 	int num[5]; 	char name[10]; 	int score; }stu[5]; int main() { 	int i, j, k, l; 	//printf("input the number of the student\n"); 	//scanf_s("%d\n",&n); 	printf("input the  students's num,name,score\n"); 	for (l = 0; l < 5; l++) 	{ 		printf("input the  students's num:"); 		scanf_s("%5d", stu[l].num); 		printf("input the  students's name:"); 		scanf_s("%s",stu[l].name,10); 		printf("input the  students's score:"); 		scanf_s("%5d", stu[l].score,5); 		printf("\n"); 	} 	struct student temp; 	for (i = 0; i < 4; i++) 	{ 		k = i; 		for (j = 0; j < 5; j++) 		if (stu[j].score>stu[k].score) 			k = j; 		temp = stu[k]; stu[k] = stu[j]; stu[j] = temp; 	} 	for (i = 0; i < 5; i++) 		printf("%6d,%10s,%5f\n", stu[i].num, stu[i].name, stu[i].score); 	printf("\n"); 	return 0; }  scanf_s用法不对哦，  scanf_s("%5d", &stu[l].num);  注意这个“&”

user: user-3
content: if (k != i) {    /*当k != i时才要交换*/             temp = stu[k];             stu[k] = stu[i];             stu[i] = temp;         }

user: user-3
content: #include<stdio.h> struct student {     char num[5];   /*建议使用char类型*/     char name[10];     int score; }stu[5];  int main() {     int i, j, k, l;     //printf("input the number of the student\n");     //scanf_s("%d\n",&n);     printf("input the  students's num,name,score\n");     for (l = 0; l < 5; l++)     {         printf("input the  students's num:");         scanf_s("%s", stu[l].num, 5);    /*改一下，用%s*/         printf("input the  students's name:");         scanf_s("%s",stu[l].name,10);         printf("input the  students's score:");         scanf_s("%5d", stu[l].score,5);         printf("\n");     }     struct student temp;     for (i = 0; i < 4; i++)     {         k = i;         for (j = 0; j < 5; j++)             if (stu[j].score>stu[k].score)                 k = j;         if (k != i) {    /*当k != i时才要交换*/             temp = stu[k];             stu[k] = stu[i];             stu[i] = temp;         }     }     for (i = 0; i < 5; i++)         printf("%6s, %10s, %5d\n", stu[i].num, stu[i].name, stu[i].score);     printf("\n");      return 0; } 改了一下你的程序，排序有点问题。另外，num应该用char类型。

user: user-4
content: 崩溃的时候在弹出的对话框按相应按钮进入调试，按Alt+7键查看Call Stack即“调用堆栈”里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处，看不懂时双击下一行，直到能看懂为止。  printf里面的%和变量的一一对应关系 scanf里面的%和变量以及变量前加不加&的一一对应关系 是C代码中非常容易出错的地方，而且通常编译还不出错。 所以在编译源代码之前值得专门仔细检查一遍甚至多遍。  在每个最后不带\n的printf后面加fflush(stdout); 在每个不想受接收缓冲区旧内容影响的scanf前面加rewind(stdin); 另外请检查scanf的返回值。 //请今后要用 char c; scanf("%c",&c); //时，都改为 char s[2]; char c; scanf("%1s",s); c=s[0]; //自动跳过一个或多个空格或Tab字符或回车换行，读取下一个字符。