鱼C论坛

 找回密码
 立即注册
查看: 4044|回复: 9

C语言的格式输入,与输出问题(麻烦)

[复制链接]
发表于 2012-12-26 17:51:56 | 显示全部楼层 |阅读模式
5鱼币
  1. #include<stdio.h>
  2. void main()
  3. {
  4. struct student
  5. {long num;
  6. char name[20];
  7. char sex;
  8. int age;
  9. float score[3];
  10. }a;

  11. struct student *head,*p;
  12. head=&a;p=&a;
  13. scanf("%ld%s%c%d%f%f%f",&p->num,p->name,&p->sex,&p->age,&p->score[0],&p->score[1],&p->score[2]);
  14. printf("%ld,%s,%c,%f,%f,%f\n",head->num,head->name,head->sex,head->age,head->score[0],head->score[1],head->score[2]);
  15. }
复制代码

scanf("%ld,%s,%c,%d,%f,%f,%f",&p->num,p->name,&p->sex,&p->age,&p->score[0],&p->score[1],&p->score[2]);和上面的输入有什么区别?在问问高手输入我们的数据后可以输出么?C的格式控制就是好麻烦,而且%s的输入还有漏洞,当我们输入到name的时候把“,”当成字符串的一部分的了。用代码板上的输入用空格格开但是输出的结果.....!!!

谢谢高手提点啊!!!!

最佳答案

查看完整内容

童鞋问的问题其实很复杂,首先,scanf函数执行的是严格匹配制度,如果是scanf("%ld%s%c%d%f%f%f",&p->num,p->name,&p->sex,&p->age,&p->score[0],&p->score[1],&p->score[2]);,则scanf按格式取值,如果中间加了逗号,那你一定要输入逗号,再输入你需要的值。举个例子: scanf("%d,%d",&i,&j); 输入:12 ,13回车 但是,j!=13. //注意,12后有一个空格,why? 原因:我解释为,在scanf()中,格式字符串中普通字符(不包括空白字符) ...
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2012-12-26 17:51:57 | 显示全部楼层
童鞋问的问题其实很复杂,首先,scanf函数执行的是严格匹配制度,如果是scanf("%ld%s%c%d%f%f%f",&p->num,p->name,&p->sex,&p->age,&p->score[0],&p->score[1],&p->score[2]);,则scanf按格式取值,如果中间加了逗号,那你一定要输入逗号,再输入你需要的值。举个例子: scanf("%d,%d",&i,&j);  输入:12 ,13回车 但是,j!=13. //注意,12后有一个空格,why?   
    原因:我解释为,在scanf()中,格式字符串中普通字符(不包括空白字符)实行的是 严格匹配,因为格式串中%d后面是一个 ','  ,因此输入中数字12后必须为一个','.         建议楼主可以在网上找份资料学习一下,因为刚刚和你讲的这些我也是刚刚看资料学习来的{:1_1:}
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2012-12-27 12:07:41 | 显示全部楼层

对啊,我所要输入不全是''%d"的控制输入,“%d”中间还有"%s"的字符串的输入,"%s"会把“,”也按照字符输入了,并不是到下一个我们要输入的数据到的地址!由不准我们使用C++不然也不会在这地方纠结了。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2012-12-27 13:17:31 | 显示全部楼层
scanf函数很严格,我刚开始也经常出错
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2012-12-27 18:05:46 | 显示全部楼层
本帖最后由 小新110 于 2012-12-27 18:08 编辑

终于搞明白你什么意思了,你代码这样写估计是不行的,因为%s会认输入的除去空白都为字符串,而%c会认所有字符,接收赋给变量。
1、输出代码少了一个控制符:sex的  %d
2、总体代码这样改:
  1. struct student *head,*p;
复制代码

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2012-12-27 18:08:55 | 显示全部楼层
  1. struct student *head,*p;
  2. head=&a;p=&a;
  3. scanf("%ld%s",&p->num,p->name);
  4. fflush(stdin);
  5. scanf("%c%d%f%f%f",&p->sex,&p->age,&p->score[0],&p->score[1],&p->score[2]);
  6. printf("%ld,%s,%c,%d,%f,%f,%f\n",head->num,head->name,head->sex,head->age,head->score[0],head->score[1],head->score[2]);
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2012-12-27 19:54:41 | 显示全部楼层
我只找到scanf在格式控制中加了“,”就会出错去掉就正常了
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2012-12-27 21:38:00 | 显示全部楼层
:-I据为己有 发表于 2012-12-27 19:54
我只找到scanf在格式控制中加了“,”就会出错去掉就正常了

:dizzy:不是哦
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2012-12-27 23:14:33 | 显示全部楼层
哈,又学习到一个方法,输入语句这样写:
  1. scanf("%ld%s%*c%c%d%f%f%f",&p->num,p->name,&p->sex,&p->age,&p->score[0],&p->score[1],&p->score[2]);
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-1-9 11:42:42 | 显示全部楼层
scanf除了%d这类替代的字符,其他的在程序输入的时候都要打出来  我觉得可能就像是告诉电脑那个字符结束了一样
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-8-13 00:38

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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