吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1407|回复: 9
收起左侧

[求助] C语言结构体

[复制链接]
澄叔 发表于 2022-11-12 23:40
25吾爱币
这个是题目【问题描述】快递单据管理。快递单据包括快递单号、发货方(姓名、电话、地址)、接货方(姓名、电话、地址)、始发城市、目的城市、快递服务商、发送时间(年月日)、接收时间(年月日)、快递价格。输入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下面是我弄的,麻烦大佬看看是哪里出问题了呢
[C] 纯文本查看 复制代码
#include <stdio.h>
#define N 10

struct name 
{
    char cname[N];
    int iphone;
    char csite[N];
    char cprovimce[N];
}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 收起 理由
youranata + 1 我很赞同!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| 澄叔 发表于 2022-11-12 23:41
题目乱了,这里重新发一下
【问题描述】快递单据管理。快递单据包括快递单号、发货方(姓名、电话、地址)、接货方(姓名、电话、地址)、始发城市、目的城市、快递服务商、发送时间(年月日)、接收时间(年月日)、快递价格。输入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:14
本帖最后由 xzqsr 于 2022-11-13 01:18 编辑

注意理解 scanf,其函数原型如下。其中,参数 format 要求你应该按照 format 定义的形式提供输入。
[C] 纯文本查看 复制代码
int scanf(const char * restrict format,...);

 
这里你在所有的 scanf 中都定义了文字,例如:scanf("快递单号:%d",&product1.inum); 中的“快递单号:”。所以在输入数据时,你应当提供的输入是“快递单号:123”,但我猜你只输入了“123”,这是不能成功将变量赋值的。(不过这里很可能发生的一种情况是,即使你输入了“快递单号:123”,也不能正常赋值。这可能是汉字字符的问题。你可以定义成 scanf("id:%d", &product1.inum); 然后输入“id:123”来感受这个问题。)
 
如果你希望在输入内容前给出文字提示,那么应当使用下列方式:
[C] 纯文本查看 复制代码
printf("快递单号:");
scanf("%d",&product1.inum);
 
zhengxinjun 发表于 2022-11-13 01:19
坑比 发表于 2022-11-13 02:16
有问题要先说明是啥类型的问题,是语义问题(词不达意)还是语法问题(编译失败)
Chenyqiang 发表于 2022-11-13 03:52
zhengxinjun 发表于 2022-11-13 01:19
大学学的C语言,但是这个scanf忘记咋用了

scanf("%d", @值); //记得格式化字符后不要加换行
一剑飘零 发表于 2022-11-13 09:12
只要把scanf里的中文移出来就可以了。用puts,或者printf先输出再输入。
例:
[C] 纯文本查看 复制代码
printf("快递单号:");
scanf("%d",&product1.inum);
zlmsx 发表于 2022-11-13 09:47
楼上几个老哥说的问题我就不重复了,我说说我看到的错误:
首先,有个最严重的问题,scanf不能输入带空格的字符串,这里你的发货方和接收方的名字都带有空格,所以会出错;
第二:37和38行的代码,多了一个参数,你在这里只需要录入三个参数,你却用了四个格式控制符。
第三:42行,格式不匹配,%d对应的是int *,你输入的是date *。后面还有很多格式不匹配的问题,仔细检查。
第四:43和44行,你明明输入的是时间,你却用%d,你应该用"%d.%d.%d";
第五:在""中嵌套""需要加转义字符:
[C] 纯文本查看 复制代码
"\""
kimorp 发表于 2022-11-13 09:49
各位都用什么软件编译C程序
 楼主| 澄叔 发表于 2022-11-13 17:42
xzqsr 发表于 2022-11-13 01:14
注意理解 scanf,其函数原型如下。其中,参数 format 要求你应该按照 format 定义的形式提供输入。
[mw_sh ...

额,这个算是那个作业系统的一个小bug吧。提供的输入确实是“快递单号:123”这种类型,如果scanf里没有汉字的话,作业系统会无法正常读取。(这样写单纯是为了作业得分吧,编译通过还是可以的)
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 05:17

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表