user-0 提问: 关于c语言的结构体问题。

回复:
user: user-1
content: #include<stdio.h> //结构体要在int main之前定义 struct student { 	int num; 	char name[20]; 	int score; }a[2]; int main() { 	printf("Please input the students infornation:\n"); 	for (int i = 0; i < 2; i++) 		scanf("%d%s%d", &a[i].num, a[i].name, &a[i].score);//字符串不用地址,""内的，去掉 	printf("The higher student score is:"); 	if (a[0].score > a[1].score) 		printf("%d %s %d", a[0].num, a[0].name, a[0].score); 	else 		if (a[0].score < a[1].score) 			printf("%d %s %d", a[1].num, a[1].name, a[1].score); 	//else printf("They get the same score"); 	return 0;  }

user: user-0
content: 引用 7 楼 forever74的回复:[quote=引用 2 楼 m0_54393423 的回复:]请问为什么我在scanf_s那里用逗号格式（就是scanf_s（"%d,%s,%d"）这里）的运行结果在监控时输入后会把所有的if条件给跳过，直接进行最后的printf而在scanf不用逗号时没有出现这种情况 这跟带不带_s没关系， 关键在于里面的%s格式符会从缓冲区当前位置一直get到白空格为止，它可不理你的逗号，也不认为逗号是分隔符。 这样一来排在它后面的%d也就是score就没捞着东西吃，饿着肚子委委屈屈地“编造”一个离谱的数据给你。[/quote] 理解了，谢谢大佬

user: user-0
content: 引用 7 楼 forever74的回复:[quote=引用 2 楼 m0_54393423 的回复:]请问为什么我在scanf_s那里用逗号格式（就是scanf_s（"%d,%s,%d"）这里）的运行结果在监控时输入后会把所有的if条件给跳过，直接进行最后的printf而在scanf不用逗号时没有出现这种情况 这跟带不带_s没关系， 关键在于里面的%s格式符会从缓冲区当前位置一直get到白空格为止，它可不理你的逗号，也不认为逗号是分隔符。 这样一来排在它后面的%d也就是score就没捞着东西吃，饿着肚子委委屈屈地“编造”一个离谱的数据给你。[/quote] 👍👍👍

user: user-2
content: 引用 2 楼 m0_54393423 的回复:请问为什么我在scanf_s那里用逗号格式（就是scanf_s（"%d,%s,%d"）这里）的运行结果在监控时输入后会把所有的if条件给跳过，直接进行最后的printf而在scanf不用逗号时没有出现这种情况 这跟带不带_s没关系， 关键在于里面的%s格式符会从缓冲区当前位置一直get到白空格为止，它可不理你的逗号，也不认为逗号是分隔符。 这样一来排在它后面的%d也就是score就没捞着东西吃，饿着肚子委委屈屈地“编造”一个离谱的数据给你。

user: user-3
content: 把scanf_s()输入的顺序改一下 scanf_s("%d,%d,%s", &a[i].num, &a[i].score,&a[i].name, 20); VS2015 C++环境调试  或者干脆不用scanf_s()改用scanf()，请参考 《VS2015中使用scanf()不报错的设置方法》 希望能够帮到您！

user: user-0
content: 请问为什么我在scanf_s这里用逗号格式（就是scanf_s（"%d,%s,%d"））在运行时它会直接忽略所有的if条件然后执行最后的printf（"They get the same score"）（如我发的图所示）；在监视时它a数组的score成员都有问题，而其它成员没有问题，为什么会这样啊请问，有劳了谢谢谢谢

user: user-0
content: 引用 1 楼 user-4的回复:修改如下，供参考：#include<stdio.h>   int main() {    struct student    {      int  num;      char name[20];      int  score;    }a[2];     printf("Please input the students infornation:\n");    for(int i=0;i<2;i++)        scanf_s("%d %s %d", &a[i].num, a[i].name,19, &a[i].score);    //"%d,%s,%d" 输入格式空格更方便//&a[i].name,20这个&可以不用     printf("The higher student score is:");    if (a[0].score > a[1].score)        printf("%d %s %d\n", a[0].num, a[0].name, a[0].score);    else       //if (a[0].score < a[1].score)//这里if多用了          printf("%d %s %d\n",a[1].num, a[1].name, a[1].score);    //else printf("They get the same score");     return 0; } 监视时scanf进行后a［0］.score,a［1］.score都不是正常值

user: user-0
content: 请问为什么我在scanf_s那里用逗号格式（就是scanf_s（"%d,%s,%d"）这里）的运行结果在监控时输入后会把所有的if条件给跳过，直接进行最后的printf而在scanf不用逗号时没有出现这种情况

user: user-4
content: 修改如下，供参考：#include<stdio.h>   int main() {    struct student    {      int  num;      char name[20];      int  score;    }a[2];     printf("Please input the students infornation:\n");    for(int i=0;i<2;i++)        scanf_s("%d %s %d", &a[i].num, a[i].name,19, &a[i].score);    //"%d,%s,%d" 输入格式空格更方便//&a[i].name,20这个&可以不用     printf("The higher student score is:");    if (a[0].score > a[1].score)        printf("%d %s %d\n", a[0].num, a[0].name, a[0].score);    else       //if (a[0].score < a[1].score)//这里if多用了          printf("%d %s %d\n",a[1].num, a[1].name, a[1].score);    //else printf("They get the same score");     return 0; }