结构体
#include<stdio.h>struct student
{
int xuehao;
char name;
float chengji;
}a,b;
int main()
{
printf("请输入第一个学生的学号、姓名和成绩:\n");
scanf_s("%d,%s,%f", &a.xuehao, a.name, &a.chengji);//name是字符串不用&
printf("请输入第二个学生的学号、姓名和成绩:\n");
scanf_s("%d,%s,%f", &b.xuehao, b.name, &b.chengji);//name是字符串不用&
if (a.chengji>b.chengji)
printf("%d\t%s\t%f\n",a.xuehao,a.name,a.chengji);
else if (a.chengji<b.chengji)
printf("%d\t%s\t%f\n",b.xuehao,b.name,b.chengji);
else
{
printf("%d\t%s\t%f\n", a.xuehao, a.name, a.chengji);
printf("%d\t%s\t%f\n", b.xuehao, b.name, b.chengji);
}
return 0;
}
直能输入第一个学生学号、姓名和成绩,第二个输入不了。 第一你没有循环语句
第二你没有申请结构体数组
第三你没有申请空间 #include <stdio.h>
struct student
{
int xuehao ;
char name ;
float chengji ;
} a , b ;
int main(void)
{
printf("请输入第一个学生的学号、姓名和成绩:") ;
scanf_s("%d%s%f" , & a . xuehao, a . name ,30 , & a .chengji) ; // scanf_s() 在读取字符串的时候,必须提供字符串存储空间长度参数
printf("请输入第二个学生的学号、姓名和成绩:") ;
scanf_s("%d%s%f" , & b . xuehao, b . name ,30 , & b .chengji) ; // scanf_s() 在读取字符串的时候,必须提供字符串存储空间长度参数
if(a . chengji > b . chengji) {
printf("%d\t%s\t%f\n" , a . xuehao , a . name , a . chengji) ;
} else if(a . chengji < b . chengji) {
printf("%d\t%s\t%f\n" , b . xuehao , b . name , b . chengji);
} else {
printf("%d\t%s\t%f\n", a . xuehao , a . name , a . chengji) ;
printf("%d\t%s\t%f\n", b . xuehao , b . name , b . chengji) ;
}
return 0 ;
}
编译、运行实况
D:\0002.Exercise\C>cl x.c
用于 x86 的 Microsoft (R) C/C++ 优化编译器 19.28.29334 版
版权所有(C) Microsoft Corporation。保留所有权利。
x.c
Microsoft (R) Incremental Linker Version 14.28.29334.0
Copyright (C) Microsoft Corporation.All rights reserved.
/out:x.exe
x.obj
D:\0002.Exercise\C>x
请输入第一个学生的学号、姓名和成绩:101 abc 99
请输入第二个学生的学号、姓名和成绩:102 bcd 65
101 abc 99.000000
D:\0002.Exercise\C> #include<stdio.h>
struct student
{
int xuehao;
char name;
float chengji;
}a, b;
int main()
{
printf("请输入第一个学生的学号、姓名和成绩:\n");
scanf_s("%d%s%f", &a.xuehao, a.name,30, &a.chengji);//name是字符串不用&
printf("请输入第二个学生的学号、姓名和成绩:\n");
scanf_s("%d%s%f", &b.xuehao, b.name,30, &b.chengji);//name是字符串不用&
if (a.chengji>b.chengji)
printf("%d\t%s\t%f\n",a.xuehao,a.name,a.chengji);
else if (a.chengji<b.chengji)
printf("%d\t%s\t%f\n",b.xuehao,b.name,b.chengji);
else
{
printf("%d\t%s\t%f\n", a.xuehao, a.name, a.chengji);
printf("%d\t%s\t%f\n", b.xuehao, b.name, b.chengji);
}
return 0;
}
/*#include <stdio.h>
struct student
{
int xuehao;
char name;
float chengji;
} a, b;
int main(void)
{
printf("请输入第一个学生的学号、姓名和成绩:");
scanf_s("%d%s%f", &a.xuehao, a.name, 30, &a.chengji); // scanf_s() 在读取字符串的时候,必须提供字符串存储空间长度参数
printf("请输入第二个学生的学号、姓名和成绩:");
scanf_s("%d%s%f", &b.xuehao, b.name, 30, &b.chengji); // scanf_s() 在读取字符串的时候,必须提供字符串存储空间长度参数
if (a.chengji > b.chengji) {
printf("%d\t%s\t%f\n", a.xuehao, a.name, a.chengji);
}
else if (a.chengji < b.chengji) {
printf("%d\t%s\t%f\n", b.xuehao, b.name, b.chengji);
}
else {
printf("%d\t%s\t%f\n", a.xuehao, a.name, a.chengji);
printf("%d\t%s\t%f\n", b.xuehao, b.name, b.chengji);
}
return 0;
}*/
scanf_s("%d%s%f", &a.xuehao, a.name, 30, &a.chengji);
scanf_s("%d,%s,%f", &a.xuehao, a.name, 30, &a.chengji);
scanf_s()l里面加“,”就出问题。 我在code blocks里面运行程序是没有问题的,但是你肯定是在VS里面运行的,建议你把读取姓名的单独拿出来写一个scanf_s("%s",30,a.name); 本帖最后由 jackz007 于 2021-3-16 14:32 编辑
张邦焱 发表于 2021-3-16 14:11
#include
struct student
{
你认为输入项之间的逗号是分隔符,但是,格式描述符 "%s" 会首先把它识别成字符串的内容,它一定会把 name + ',' + chengji 输入给 name,而 chengji 则无法获得输入,这就是问题所在。所以,作为经验,scanf() 的格式描述符越简洁越好,最好不要出现任何分隔符,否则,各种 "怪现象" 总是会不期而至。 struct student
{
int xuehao;
char name;
float chengji;
}a, b;
int input_info()
{
printf("请输入第一个学生的学号、姓名和成绩:\n");
scanf_s("%d ", &a.xuehao);//name是字符串不用&
scanf_s("%s",a.name, 30);
scanf_s("%f", &a.chengji);
printf("请输入第二个学生的学号、姓名和成绩:\n");
scanf_s("%d ", &b.xuehao);//name是字符串不用&
scanf_s("%s", b.name, 30);
scanf_s("%f", &b.chengji);
if (a.chengji > b.chengji)
printf("%d\t%s\t%f\n", a.xuehao, a.name, a.chengji);
else if (a.chengji < b.chengji)
printf("%d\t%s\t%f\n", b.xuehao, b.name, b.chengji);
else
{
printf("%d\t%s\t%f\n", a.xuehao, a.name, a.chengji);
printf("%d\t%s\t%f\n", b.xuehao, b.name, b.chengji);
}
return 0;
}
int main()
{
input_info();
return 0;
}
这样亲测有效了,scanf_s这个函数有点特别,在VS中的话一般输入字符串还是单独拿出来输入吧,不会出错
另外,不知道你学指针了没有,如果学习了的话,建议是自己申请内存来存储信息,使用malloc申请内存空间 海-啵啵鱼 发表于 2021-3-16 14:44
struct student
{
int xuehao;
嗯嗯好嘞 {:5_106:}
页:
[1]