搜索

【求助】学过C 语言的进

[复制链接]
 楼主| 发表于 2011-11-8 00:13:04 | 显示全部楼层 来自 中国福建福州来自: 中国福建福州
长乐虾米 发表于 2011-11-7 22:53
main()
{
    char mima = '0';

坛友“犀利的人生”已经给了解决方案。你这段代码是不对的,这样只是表面上显示正确,但不能实际应用,前面的char mima = '0';将变的无意义,
谢谢,你的关注。
发表于 2011-11-8 01:56:54 | 显示全部楼层 来自 中国福建福州来自: 中国福建福州
main()
{
    char mima;                                                    1
    scanf("%c",&mima);                                       2
    while(mima!='a')                                            3
    {
        printf("qing chong xin shu ru\n");                 4
        scanf("%c",&mima);                                   5
    }
    printf("good\n");                                           6
    getch();
}

帮你分析下,你本意是当键盘上输入字符'a'时,屏幕给你输出"good",如果输入的不是字符'a',如b,c等,则提示重新输入。

你试验时,先输入'b',然后按回车,实际上这个时候你输入了两个字符,一个是'b',另一个是换行符即'\n',因为你按了回车了,你的输入流内容是"b\n"。所以程序运行下去,到第3行时判断while(mima!='a') 值为真(因为此时mima=='b'),则直接运行到第4行输出第一次"qing chong xin shu ru\n",然后跳到第5行将你输入的'\n'赋值给mima,然后程序重新回到第3行判断while(mima!=a)为真(因为此时mima=='\n'),于是又跳到第4行接着第二次输出"qing chong xin shu ru\n",然后再等你再次输入字符。
由此才会两次重复输出。


所以,直接把scanf改成getch()获得的键盘输入直接赋值给mima即可。
#include<stdio.h>
main()
{
    char mima;
    mima=getch();
    printf("%c\n",mima);    //这行可以省略
    while(mima!='a')
    {
        printf("qing chong xin shu ru\n");
        mima=getch();
        printf("%c\n",mima);    //这行可以省略
    }
    printf("good\n");
    getch();
}
 楼主| 发表于 2011-11-8 03:32:00 | 显示全部楼层 来自 中国福建福州来自: 中国福建福州
取名很难 发表于 2011-11-8 01:56
main()
{
    char mima;                                                    1

先谢谢你的回复,虽然你编译的代码不是我要的(因为在实际使用时,你是不知道密码是几个字符),但通过你的分析结合“犀利的人生”的回复,才记起来我原来的代码有一个低级的错误,转换符“%c”是单个字符应该使用”%s"字符串。

记得当天问老师为什么会输出两次是不是代码错了,老师回答说你的代码没错,因为你按了回车,虽然没有理解也没追问,但是一直很纳闷,现在终于明白了,谢谢各位
您需要登录后才可以回帖 登录 | 注册

本版积分规则

精华帖子
热门图文
快速回复 返回顶部 返回列表