C语言结构体
这个是题目【问题描述】快递单据管理。快递单据包括快递单号、发货方(姓名、电话、地址)、接货方(姓名、电话、地址)、始发城市、目的城市、快递服务商、发送时间(年月日)、接收时间(年月日)、快递价格。输入1个快递单据、输出1个快递单据。【输入形式】快递单号:10202发货方:Xiao Li,13601110123,Xiangjiang KLMY接收方:Xiao Wang,1330000666,Beijing XC始发城市:kelamayi目的城市:Beijing快递服务商:Fengxingxia发送时间:2022.11.11接收时间:2022.11.16快递价格:24【输出形式】快递单号:10202发货方:Xiao Li,13601110123,Xiangjiang KLMY接收方:Xiao Wang,1330000666,Beijing XC始发城市:kelamayi目的城市:Beijing快递服务商:Fengxingxia发送时间:2022.11.11接收时间:2022.11.16快递价格:24下面是我弄的,麻烦大佬看看是哪里出问题了呢#include <stdio.h>
#define N 10
struct name
{
char cname;
int iphone;
char csite;
char cprovimce;
}csender,creceiver;//发货方,收货方
struct date
{
int iyear;
int imonth;
int iday;
}ibdate,irdate; //发货、收货日期
struct Product
{
int inum;
struct name csender;
struct name creceiver;
char cgcity;
char cdestination;
char cshopper;
struct date ibdate;
struct date irdate;
int iprice;
}; //声明结构
int main()
{
struct Product product1;//定义结构体变量
scanf("快递单号:%d",&product1.inum);//输入结构成员(产品名称)
scanf("发货方:%s %d %s %s",&product1.csender.cname,&product1.csender.iphone,&product1.csender.csite,&product1.csender.cprovimce);
scanf("接收方:%s %d %s %s",&product1.creceiver.cname,&product1.creceiver.iphone,&product1.creceiver.csite,&product1.creceiver.cprovimce);
scanf("始发城市:%s",&product1.cgcity);
scanf("目的城市:%s",&product1.cdestination);
scanf("快递服务商:%s",&product1.cshopper);
scanf("发送时间:%d",&product1.ibdate);
scanf("接收时间:%d",&product1.ibdate.iyear,&product1.ibdate.imonth,&product1.ibdate.iday);
scanf("快递价格:%d",&product1.irdate.iyear,&product1.irdate.imonth,&product1.irdate.iday); //输入
printf("快递单号:%d\n",product1.inum);//输入结构成员(产品名称)
printf("发货方:%s "," %d "," %s" " %s\n",product1.csender.cname,product1.csender.iphone,product1.csender.csite,product1.csender.cprovimce);
printf("接收方:%s "," %d "," %s " " %s\n",product1.creceiver.cname,product1.creceiver.iphone,product1.creceiver.csite,product1.creceiver.cprovimce);
printf("始发城市:%s\n",product1.cgcity);
printf("目的城市:%s\n",product1.cdestination);
printf("快递服务商:%s\n",product1.cshopper);
printf("发送时间:%d " " %d " " %d\n",product1.ibdate.iyear,product1.ibdate.imonth,product1.ibdate.iday);
printf("接收时间:%d " " %d " " %d\n",product1.irdate.iyear,product1.irdate.imonth,product1.irdate.iday);
printf("快递价格:%d\n",product1.iprice); //输出
return 0;
}
题目乱了,这里重新发一下
【问题描述】快递单据管理。快递单据包括快递单号、发货方(姓名、电话、地址)、接货方(姓名、电话、地址)、始发城市、目的城市、快递服务商、发送时间(年月日)、接收时间(年月日)、快递价格。输入1个快递单据、输出1个快递单据。
【输入形式】快递单号:10202
发货方:Xiao Li,13601110123,Xiangjiang KLMY
接收方:Xiao Wang,1330000666,Beijing XC
始发城市:kelamayi
目的城市:Beijing
快递服务商:Fengxingxia
发送时间:2022.11.11
接收时间:2022.11.16
快递价格:24
【输出形式】快递单号:10202
发货方:Xiao Li,13601110123,Xiangjiang KLMY
接收方:Xiao Wang,1330000666,Beijing XC
始发城市:kelamayi
目的城市:Beijing
快递服务商:Fengxingxia
发送时间:2022.11.11
接收时间:2022.11.16
快递价格:24 本帖最后由 xzqsr 于 2022-11-13 01:18 编辑
注意理解 scanf,其函数原型如下。其中,参数 format 要求你应该按照 format 定义的形式提供输入。
int scanf(const char * restrict format,...);
这里你在所有的 scanf 中都定义了文字,例如:scanf("快递单号:%d",&product1.inum); 中的“快递单号:”。所以在输入数据时,你应当提供的输入是“快递单号:123”,但我猜你只输入了“123”,这是不能成功将变量赋值的。(不过这里很可能发生的一种情况是,即使你输入了“快递单号:123”,也不能正常赋值。这可能是汉字字符的问题。你可以定义成 scanf("id:%d", &product1.inum); 然后输入“id:123”来感受这个问题。)
如果你希望在输入内容前给出文字提示,那么应当使用下列方式:
printf("快递单号:");
scanf("%d",&product1.inum);
大学学的C语言,但是这个scanf忘记咋用了 有问题要先说明是啥类型的问题,是语义问题(词不达意)还是语法问题(编译失败) zhengxinjun 发表于 2022-11-13 01:19
大学学的C语言,但是这个scanf忘记咋用了
scanf("%d", @值); //记得格式化字符后不要加换行 只要把scanf里的中文移出来就可以了。用puts,或者printf先输出再输入。
例:
printf("快递单号:");
scanf("%d",&product1.inum); 楼上几个老哥说的问题我就不重复了,我说说我看到的错误:
首先,有个最严重的问题,scanf不能输入带空格的字符串,这里你的发货方和接收方的名字都带有空格,所以会出错;
第二:37和38行的代码,多了一个参数,你在这里只需要录入三个参数,你却用了四个格式控制符。
第三:42行,格式不匹配,%d对应的是int *,你输入的是date *。后面还有很多格式不匹配的问题,仔细检查。
第四:43和44行,你明明输入的是时间,你却用%d,你应该用"%d.%d.%d";
第五:在""中嵌套""需要加转义字符:"\"" 各位都用什么软件编译C程序 xzqsr 发表于 2022-11-13 01:14
注意理解 scanf,其函数原型如下。其中,参数 format 要求你应该按照 format 定义的形式提供输入。
额,这个算是那个作业系统的一个小bug吧。提供的输入确实是“快递单号:123”这种类型,如果scanf里没有汉字的话,作业系统会无法正常读取。(这样写单纯是为了作业得分吧,编译通过还是可以的)
页:
[1]