c语言出错代码是对的 可为什么执行起来 就出错不管我输入什么 按回车都会在循环一次 怎么办

C++/c语言题目,我做了一道题目总是循环就错,可是第一次运行结果就对,谁能帮我看看下面的是题目:国际象棋的棋盘是黑白相间的8 * 8的方格,棋子放在格子中间.如下图所示:王、后、车、象的走子规则如下:• 王:横、直、斜都可以走,但每步限走一格.• 后:横、直、斜都可以走,每步格数不受限制.• 车:横、竖均可以走,不能斜走,格数不限.• 象:只能斜走,格数不限.写一个程序,给定起始位置和目标位置,计算王、后、车、象从起始位置走到目标位置所需的最少步数.Input第一行是测试数据的组数t(0≤t≤20).以下每行是一组测试数据,每组包括棋盘上的两个位置,第一个是起始位置,第二个是目标位置.位置用“字母-数字”的形式表示,字母从“a”到“h”,数字从“1”到“8”.Output对输入的每组测试数据,输出王、后、车、象所需的最少步数.如果无法到达,就输出“Inf”.Sample Input2a1 c3f5 f8Sample Output2 1 2 13 1 1 Inf我是这样写的:#includeint main(){int n,i,sum,qi2,mo2,x,y,a,wang,hou,che,char qi1,mo1,b[3];scanf("%d\n",&n);for(i=0;i
逍遥随风167
scanf("%c%d %c%d\n",&qi1,&qi2,&mo1,&mo2);这样修改,能根据你目前的输入方式得到你想要的结果.(不过最后他还需要再输入个回车才能 提示 按任意键继续,你可以 任意按个别的键 再按回车,达到效果.)你这个输入的问题,是没有很好的了解 scanf 的流输入 性质,额,倒是要谢谢你,让我更加了解了.不过,C++一般用cout 操作.你把for循环里面2个scanf“”中的部分 连在一起 得到"%c%d %c%d%c%d %c%d"那么如果你上面的代码的入参 输入 改成 2(回车)f5 f8a1 c3(回车),一样能得到正确答案.希望,你能体会到scanf("\n");的感觉.欢迎追问.
我听人说过这个,但是还是不怎么懂,我也加了“\n”,但是还是不行,你能用你的方法帮我谢谢这个程序吗?然后我再对比下我的,应该就知道自己是怎么回事了,一定追加,谢谢,我弄了好久都没有弄懂!
你把你的 这行 scanf("%c%d %c%d",&qi1,&qi2,&mo1,&mo2);
改成 scanf("%c%d %c%d\n",&qi1,&qi2,&mo1,&mo2);
试了,然后要多输入一个随机的符号,但是二次循环的结果依然错误,你可以拷过去运行试试
2(回车)f5 f8(回车)a1 c3(回车)1(回车)
你入参按照这个输入一次试试。
为您推荐:
其他类似问题
扫描下载二维码君,已阅读到文档的结尾了呢~~
c语言南通,c,帮助,c语言,c语言入门,自学c语言,c语言教程
扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='/DocinViewer--144.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口21ic官方微信-->
后使用快捷导航没有帐号?
查看: 3024|回复: 19
请问C语言中的main()函数是不是可以看作一个循环函数?
&&已结帖(0)
主题帖子积分
资深技术员, 积分 392, 距离下一级还需 108 积分
资深技术员, 积分 392, 距离下一级还需 108 积分
主题帖子积分
专家等级:结帖率:0%
主题帖子积分
资深技术员, 积分 392, 距离下一级还需 108 积分
资深技术员, 积分 392, 距离下一级还需 108 积分
我的mian()中包含一个循环函数,我用while来循环这个函数,可我把while去掉后,程序还能正常循环。
主题帖子积分
资深工程师, 积分 12573, 距离下一级还需 7427 积分
资深工程师, 积分 12573, 距离下一级还需 7427 积分
主题帖子积分
专家等级:结帖率:100%
主题帖子积分
资深工程师, 积分 12573, 距离下一级还需 7427 积分
资深工程师, 积分 12573, 距离下一级还需 7427 积分
在C语言中不可以把main()函数看作一个循环函数!
在C语言标准中没有定义main函数返回到哪里,所以不同的C实现有不同的结果,一般是一个停机操作(HALT指令),也可能是一个返回Reset地址的操作,最坏的情况是不做任何处理,这种最坏情况可造成程序乱跑。你的while去掉后程序还能正常循环,很可能是main返回后回到了Reset地址。即使可以用,也轻易不要这样用,对这种未定义的动作,不知哪天会出事。
主题帖子积分
主题帖子积分
专家等级:结帖率:75%
主题帖子积分
不能。main函数会执行完. 必须自己写while.
主题帖子积分
技术总监, 积分 39817, 距离下一级还需 10183 积分
技术总监, 积分 39817, 距离下一级还需 10183 积分
主题帖子积分
专家等级:结帖率:3%
主题帖子积分
技术总监, 积分 39817, 距离下一级还需 10183 积分
技术总监, 积分 39817, 距离下一级还需 10183 积分
&&现象是正确的,并不能说明过程是正确的...
主题帖子积分
高级工程师, 积分 7919, 距离下一级还需 81 积分
高级工程师, 积分 7919, 距离下一级还需 81 积分
主题帖子积分
专家等级:结帖率:33%
主题帖子积分
高级工程师, 积分 7919, 距离下一级还需 81 积分
高级工程师, 积分 7919, 距离下一级还需 81 积分
而且和硬件平台有关系,
主题帖子积分
主题帖子积分
专家等级:结帖率:0%
主题帖子积分
main里面内嵌while
主题帖子积分
主题帖子积分
专家等级:结帖率:29%打赏:0.00受赏:9.00
主题帖子积分
不对,不过有的编译器处理了!
主题帖子积分
技术总监, 积分 39817, 距离下一级还需 10183 积分
技术总监, 积分 39817, 距离下一级还需 10183 积分
主题帖子积分
专家等级:结帖率:3%
主题帖子积分
技术总监, 积分 39817, 距离下一级还需 10183 积分
技术总监, 积分 39817, 距离下一级还需 10183 积分
什么编译器
什么编译器
主题帖子积分
助理工程师, 积分 1076, 距离下一级还需 924 积分
助理工程师, 积分 1076, 距离下一级还需 924 积分
主题帖子积分
专家等级:结帖率:66%
主题帖子积分
助理工程师, 积分 1076, 距离下一级还需 924 积分
助理工程师, 积分 1076, 距离下一级还需 924 积分
while应该是必须有的
主题帖子积分
主题帖子积分
专家等级:结帖率:100%
主题帖子积分
提示: 作者被禁止或删除 内容自动屏蔽
主题帖子积分
技术总监, 积分 41607, 距离下一级还需 8393 积分
技术总监, 积分 41607, 距离下一级还需 8393 积分
主题帖子积分
专家等级:结帖率:86%打赏:0.00受赏:82.30
主题帖子积分
技术总监, 积分 41607, 距离下一级还需 8393 积分
技术总监, 积分 41607, 距离下一级还需 8393 积分
LS:你在不断地软件“复位”呢
程序走到FFFF后又回到了0000。未编程区域的内容为FF(NOP指令)。
主题帖子积分
技术总监, 积分 39817, 距离下一级还需 10183 积分
技术总监, 积分 39817, 距离下一级还需 10183 积分
主题帖子积分
专家等级:结帖率:3%
主题帖子积分
技术总监, 积分 39817, 距离下一级还需 10183 积分
技术总监, 积分 39817, 距离下一级还需 10183 积分
我用KEIL试过
&我用KEIL试过,MAIN是个大循环&DA&SB...
主题帖子积分
高级工程师, 积分 6935, 距离下一级还需 1065 积分
高级工程师, 积分 6935, 距离下一级还需 1065 积分
主题帖子积分
专家等级:结帖率:0%
主题帖子积分
高级工程师, 积分 6935, 距离下一级还需 1065 积分
高级工程师, 积分 6935, 距离下一级还需 1065 积分
12楼不要误导
c实现细节取决startup常见的2种模式Mode&a:&&&&jump&&mainhere:&&&&jump&&hereMode&b:here:&&&&jump&main&&&&jump&herekeil&可能是第2种
主题帖子积分
技术总监, 积分 39817, 距离下一级还需 10183 积分
技术总监, 积分 39817, 距离下一级还需 10183 积分
主题帖子积分
专家等级:结帖率:3%
主题帖子积分
技术总监, 积分 39817, 距离下一级还需 10183 积分
技术总监, 积分 39817, 距离下一级还需 10183 积分
NOP指令编码不是FF
NOP指令编码不是FF,startup运行后把控制权交给MAIN而已...
主题帖子积分
初级技术员, 积分 53, 距离下一级还需 47 积分
初级技术员, 积分 53, 距离下一级还需 47 积分
主题帖子积分
专家等级:结帖率:0%
主题帖子积分
初级技术员, 积分 53, 距离下一级还需 47 积分
初级技术员, 积分 53, 距离下一级还需 47 积分
根本就是不可能的事情,应该是有其他的原因
主题帖子积分
中级工程师, 积分 3822, 距离下一级还需 1178 积分
中级工程师, 积分 3822, 距离下一级还需 1178 积分
主题帖子积分
专家等级:结帖率:87%
主题帖子积分
中级工程师, 积分 3822, 距离下一级还需 1178 积分
中级工程师, 积分 3822, 距离下一级还需 1178 积分
主题帖子积分
主题帖子积分
专家等级:结帖率:0%
主题帖子积分
C51,确实程序运行到最后一条之后,就会返回开头重新运行。看似是硬件级的“大循环”,所以一般都最后加一个 while(1) 。但你不能说C语言中的main函数本身就是个大循环。
振南的znFAT -- 单片机上上的FAT32文件系统
主题帖子积分
助理工程师, 积分 1511, 距离下一级还需 489 积分
助理工程师, 积分 1511, 距离下一级还需 489 积分
主题帖子积分
专家等级:结帖率:93%
主题帖子积分
助理工程师, 积分 1511, 距离下一级还需 489 积分
助理工程师, 积分 1511, 距离下一级还需 489 积分
没有这样设计的。
主题帖子积分
中级技术员, 积分 131, 距离下一级还需 169 积分
中级技术员, 积分 131, 距离下一级还需 169 积分
主题帖子积分
专家等级:结帖率:0%
主题帖子积分
中级技术员, 积分 131, 距离下一级还需 169 积分
中级技术员, 积分 131, 距离下一级还需 169 积分
为你携手,改变宠物世界。
主题帖子积分
中级技术员, 积分 197, 距离下一级还需 103 积分
中级技术员, 积分 197, 距离下一级还需 103 积分
主题帖子积分
专家等级:结帖率:82%
主题帖子积分
中级技术员, 积分 197, 距离下一级还需 103 积分
中级技术员, 积分 197, 距离下一级还需 103 积分
专业供应塔钟,花坛钟,子母钟,区域时钟系统,船钟,景观钟,寻求长期合作单位和个人,实现双赢。QQ:
技术新星奖章
人才类勋章
核心会员奖章
等级类勋章
时间类勋章
奔腾之江水
发帖类勋章
技术高手奖章
人才类勋章
永恒之光奖章
等级类勋章
技术导师奖章
人才类勋章
时间类勋章
坚毅之洋流
发帖类勋章
荣誉元老奖章
等级类勋章
时间类勋章
技术领袖奖章
人才类勋章
无冕之王奖章
等级类勋章
沉静之湖泊
发帖类勋章
时间类勋章
社区建设奖章
等级类勋章
精华达人奖章
等级类勋章
湍急之河流
发帖类勋章
技术奇才奖章
人才类勋章
欢快之小溪
发帖类勋章
时间类勋章
时间类勋章
热门推荐 /3VB编程、代码、技术问题解决方案
vb中如何退出当前一次循环,即像 c语言中continue一样?
方案整理者:IA_2009 &&&&&& 发布时间:
本人想在for&i=1&to&n&循环中退出当前一次循环,继续一下次循环。
就像c中的continue一样。请问如何实现??
推荐解决方案
for&i&=&0&to&10&
&&&&if&...&then
&&&&elseif&...&then
&&&&&&&goto&con
&&&&end&if
其他解决方案
使用GOTO语句吧.
只能在for循环是虽if语句来实现
可以用IF...ELSE来实现。
for&i&=&0&to&10&
&&&&if&...&then
&&&&elseif&...&then
&&&&&&&&exit&for
&&&&end&ifC语言,按下回车后循环被系统运行了两次才再次运行到scanf(),为什么?
刚刚自学C语言,不是很会。试着使用scanf(&%c&,&char)时发现想要实现的一个循环莫名多出来一截。&br&这是我的代码&br&&br&&div class=&highlight&&&pre&&code class=&language-c&&&span class=&cp&&#include&stdio.h&&/span&
&span class=&kt&&int&/span& &span class=&nf&&main&/span&&span class=&p&&(&/span&&span class=&kt&&void&/span&&span class=&p&&)&/span&
&span class=&p&&{&/span&
&span class=&kt&&int&/span& &span class=&n&&X&/span&&span class=&o&&=&/span&&span class=&mi&&1&/span&&span class=&p&&;&/span&
&span class=&kt&&char&/span& &span class=&n&&ch&/span&&span class=&p&&;&/span&
&span class=&n&&printf&/span&&span class=&p&&(&/span&&span class=&s&&&Please enter a character:&/span&&span class=&se&&\n&/span&&span class=&s&&&&/span&&span class=&p&&);&/span&
&span class=&n&&scanf&/span&&span class=&p&&(&/span&&span class=&s&&&%c&&/span&&span class=&p&&,&/span&&span class=&o&&&&/span&&span class=&n&&ch&/span&&span class=&p&&);&/span&
&span class=&k&&while&/span&&span class=&p&&(&/span&&span class=&n&&X&/span&&span class=&o&&&&/span&&span class=&mi&&0&/span&&span class=&p&&)&/span&
&span class=&p&&{&/span&
&span class=&n&&printf&/span&&span class=&p&&(&/span&&span class=&s&&&The code for %c is %d.&/span&&span class=&se&&\n&/span&&span class=&s&&&&/span&&span class=&p&&,&/span&&span class=&n&&ch&/span&&span class=&p&&,&/span&&span class=&n&&ch&/span&&span class=&p&&);&/span&
&span class=&n&&printf&/span&&span class=&p&&(&/span&&span class=&s&&&Please enter a character:&/span&&span class=&se&&\n&/span&&span class=&s&&&&/span&&span class=&p&&);&/span&
&span class=&n&&scanf&/span&&span class=&p&&(&/span&&span class=&s&&&%c&&/span&&span class=&p&&,&/span&&span class=&o&&&&/span&&span class=&n&&ch&/span&&span class=&p&&);&/span&
&span class=&n&&X&/span&&span class=&o&&=&/span&&span class=&n&&X&/span&&span class=&o&&+&/span&&span class=&mi&&1&/span&&span class=&p&&;&/span&
&span class=&p&&}&/span&
&span class=&k&&return&/span& &span class=&mi&&0&/span&&span class=&p&&;&/span&
&span class=&p&&}&/span&
&/code&&/pre&&/div&&br&编译成功没有问题。但是运行的时候&img src=&/62ee105bb839_b.jpg& data-rawwidth=&683& data-rawheight=&435& class=&origin_image zh-lightbox-thumb& width=&683& data-original=&/62ee105bb839_r.jpg&&第一次,输入a,按下[Enter]后&img src=&/67b2ac0f0ad19bfbae027_b.jpg& data-rawwidth=&681& data-rawheight=&448& class=&origin_image zh-lightbox-thumb& width=&681& data-original=&/67b2ac0f0ad19bfbae027_r.jpg&&直接不仅显示出a的ASCII码,还直接出现了^J的ASCII码。就是按了一次回车但是循环被执行了两次。没有想通为什么。求教。&br&PS:这样实现循环总觉得奇怪,我是用了一个变量X才写出循环的,如果想要实现有什么更好的方法吗?&br&&br&初学者,问题比较简单,表述也可能不是很准确。求教,谢谢!
刚刚自学C语言,不是很会。试着使用scanf("%c",&char)时发现想要实现的一个循环莫名多出来一截。这是我的代码#include&stdio.h&
int main(void)
printf("Please enter a character:\n");
scanf("%c",&ch);
while(X&0)
printf("The code for %c is %d.\n",ch,ch);
printf("Please enter a character:\n");
scanf("%c",&ch);
因为你输入的是a\n,当然是两个字符了
我来说详细点,题主在输入a并且按下回车按键的时候,在win下共产生3个字符:a\n\r。\n是换行,\r是回车。(\n和\r在不同平台下的意思会不一样)。然而实际上读入缓冲区的只有a\n,这样,题主读入了a后,其实在缓冲区还有\n,理所当然还能读到一个字符(\n)。想解决这个也容易,在读入输入的字符后,调用getchar(),把\n读取出来。
对于多一个循环那部分,程序写的没有错误,是你输入方式错了请打开 对校的C++ Primer,翻到第14页这是我输入完字符,按ctrl+D后的结果一切正常~一切正常~
你在输入了字符a的时候,要以键入回车(\n)作为结束,而此时,回车也被存入键盘缓冲区,在下一次调用scanf()时,直接在缓冲区里面读取\n,不用再等待您的输入,前面一个scanf()读取了字符a。为了避免这种情况,可以在第二个scanf前面添加一个fllush(stdin);来清除缓冲区。这样程序就会等待你的第二次输入
X是没有必要的,想写无限循环就while(1)好了,不过最好别这样做。代码可以改成这样#include &stdio.h&
int main(void)
printf("Please enter a character:\n");
while(scanf("%c%*c", &ch) != EOF)
printf("The code for %c is %d.\n", ch, ch);
printf("Please enter a character:\n");
在while语句中判断scan的返回值是否等于EOF,可以知道输入是否结束(在命令行中用ctrl+z结束输入)scanf中'%*c'用于跳过一个字符,也就是\n
c语言通过标准输入设备(键盘)输入的时候是先把数据存到缓冲区里面。首先编译器看到scanf("%c", &ch);后知道需要一个字符,那么就在缓冲区里寻找找是否有一个字符,如果缓冲区中没有则会请求用户输入。而如果缓冲区有字符的话就会把缓冲区里的字符存入变量中。在你刚才的输入时,字符'a'和回车('\n')都会存放在缓冲区中,所以第二次scanf不会请求用户输入而直接把\n存到变量中去了。你可以这样写:printf("Please enter a character:\n");
scanf("%c\n",&ch);
这样可以把换行字符从缓冲区清除掉。
回车也算字符解决方法是在每次scanf后加一句while(getchar()!='\n')循环的话,可以让循环条件一直为1就可以成为无限循环了。手机写代码果然累
要写一个循环的话一般就写while(1) {
//do something }
唔 其实你没有必要x自加的 去掉这句也是会一直执行的scanf不仅抓到了a 第二次循环里面还抓到了那个回车 你可以试试清空缓冲区
在%前加空格
已有帐号?
无法登录?
社交帐号登录

我要回帖

更多关于 c语言循环结构 的文章

 

随机推荐