| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2206 人关注过本帖, 1 人收藏
标题:C语言入门,代码错误,但是我实在看不出来那里错误,
只看楼主 加入收藏
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
回复 19 楼 马刀 66
第二次,收到的第一个字符是'\n',那是不可显示字符,你看不到而已(事实上你看到光标换行了)。

[ 本帖最后由 TonyDeng 于 2014-6-28 12:00 编辑 ]

授人以渔,不授人以鱼。
2014-06-28 11:57
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
下面作点扩展,给有兴趣的人参考:
图片附件: 游客没有浏览图片的权限,请 登录注册


这种问题,在学过汇编的人身上表现尤其显著,比如朱老三(在诸如把char当数值运算这类C陋习,在他的代码中表露无遗)。


[ 本帖最后由 TonyDeng 于 2014-6-28 12:02 编辑 ]

授人以渔,不授人以鱼。
2014-06-28 11:59
马刀66
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2014-6-28
收藏
得分:0 
回复 18 楼 wssy213
我的意图:任意输入英文字母中三个,输出他们的前一个字母
#include<stdio.h>
void main()
{  
     char char1,char2,char3;
     int i=1;
     do{
         printf("请输入三个字母(第%d次测试)\n",i);
         scanf("%c,%c,%c",&char1,&char2,&char3);
            i++;
         printf("接收到的字母:\n%c,%c,%c\n它们的前三个字母:\n%c,%c,%c",
            char1,char2,char3,char1-1,char2-1,char3-1);
         printf("\n");
            }while(i<6);
}
问题1 程序可以看下怎么改吗
我看了您给的网页,我现在输入用“逗号割开”,输入完按enter运行,第一次运行正确,按您推荐的资料原文资料=====回车符留在了输入流缓冲区,当下一次输入仍用scanf或者getchar读入一个字符的时候,则会把缓冲区的回车符读取从而导致结果不正确。
2014-06-28 12:39
马刀66
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2014-6-28
收藏
得分:0 
回复 21 楼 TonyDeng
嗯,我知道原因,但是不会改程序
我的意图:任意输入英文字母中三个,输出他们的前一个字母
#include<stdio.h>
void main()
{  
     char char1,char2,char3;
     int i=1;
     do{
         printf("请输入三个字母(第%d次测试)\n",i);
         scanf("%c,%c,%c",&char1,&char2,&char3);
            i++;
         printf("接收到的字母:\n%c,%c,%c\n它们的前三个字母:\n%c,%c,%c",
            char1,char2,char3,char1-1,char2-1,char3-1);
         printf("\n");
            }while(i<6);
}
问题1 程序可以看下怎么改吗
2014-06-28 12:44
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
回复 24 楼 马刀 66
要改好,很多地方要改。简要地说,良好的习惯是不要在一句scanf()中读取多于一个的数据,待会我吃完饭写个示例给你看。

授人以渔,不授人以鱼。
2014-06-28 12:46
马刀66
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2014-6-28
收藏
得分:0 
回复 25 楼 TonyDeng
麻烦你了,我等着
2014-06-28 12:47
wssy213
Rank: 12Rank: 12Rank: 12
来 自:湖南
等 级:贵宾
威 望:10
帖 子:967
专家分:3703
注 册:2014-6-6
收藏
得分:0 
#include<stdio.h>
int main()
{
    char char1,char2,char3,c;
    int i=1;
    do
    {
        printf("请输入三个字母(第%d次测试)\n",i);
        scanf("%c,%c,%c",&char1,&char2,&char3);
        while((c=getchar())='\n') break;//清空输入流
        i++;
        printf("接收到的字母:\n%c,%c,%c\n它们的前三个字母:\n%c,%c,%c",char1,char2,char3,char1-1,char2-1,char3-1);
        printf("\n");
    }
    while(i<6);
    return 0;
}
感觉你的格式不规范诶(当然 我这个也不是很规范)
http://wenku.baidu.com/link?url=2RkEsCVy4_mwPQp-xqszV9so9nSoz-NKTfhntTpWFxl1O1KzBLUSWjbQ2sSDFz0GRG-KyQj3KgSiQGWmnLxsFxdBj0RF9nPfdypPLaiup6S
这个可以去看看

坚持----------------------------------唯一的道路
shit ! ! !
2014-06-28 13:31
马刀66
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2014-6-28
收藏
得分:0 
回复 27 楼 wssy213
你的while那段少了个等于号,谢谢你了,我看下你推荐的文档,谢谢
2014-06-28 13:44
wssy213
Rank: 12Rank: 12Rank: 12
来 自:湖南
等 级:贵宾
威 望:10
帖 子:967
专家分:3703
注 册:2014-6-6
收藏
得分:0 

给忘了。。。。。。。。

坚持----------------------------------唯一的道路
shit ! ! !
2014-06-28 13:50
vvvcuu
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:12
帖 子:353
专家分:1253
注 册:2014-4-22
收藏
得分:0 
回复 23 楼 马刀 66
你看以考虑在scanf()后面加一句getchar();

程序代码:
#include<stdio.h>
void main()
{  
     char char1,char2,char3;
     int i=1;
     do{
         printf("请输入三个字母(第%d次测试)\n",i);
         scanf("%c,%c,%c",&char1,&char2,&char3);
          getchar();                              //getchar()吸收掉回车符.
            i++;
         printf("接收到的字母:\n%c,%c,%c\n它们的前三个字母:\n%c,%c,%c",
            char1,char2,char3,char1-1,char2-1,char3-1);
         printf("\n");
            }while(i<6);
}

代码测试环境:  WinXP+C-Free5.0.
2014-06-28 13:54
快速回复:C语言入门,代码错误,但是我实在看不出来那里错误,
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.048490 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved