| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 754 人关注过本帖
标题:为什么我的do..while不被触发呢???
只看楼主 加入收藏
Sornets
Rank: 2
等 级:论坛游民
帖 子:102
专家分:61
注 册:2012-11-22
结帖率:58.82%
收藏
已结贴  问题点数:20 回复次数:10 
为什么我的do..while不被触发呢???
我调试的是最低下的scanf没有被触发。

程序代码:
#include <stdio.h>
#include <stdlib.h>
void input_f(char str[])
{
    scanf("%s",str);
    if(!check_f(str))
    {
        return ;
    }

}
void change_f(char * str)
{
    int len;
    lower_f(str);
    len = strlen_f(str);
    if(len >= 100)
    {
        printf("Too Long!\n");
        return;
    }
    if (str[0] == 'a' || str[0] == 'e' || str[0] == 'i' || str[0] == 'o' || str[0] == 'u')
    {
        str[len++] = 'p';
        str[len++] = 'y';
        str[len] = '\0';
    }
    else
    {
        int i;
        for( i = 1; i < len; i++ )
        {
            str[i - 1] = str[i];
        }
        str[i++] = 'p';
        str[i++] = 'y';
        str[i] = '\0';
    }
}
void print_f(char str[])
{
    printf("%s",str);
}
void lower_char_f(char * str)//修改为小写
{
    if(*str < 'a')
        *str = *str + ('a' - 'A');
}
void lower_f(char str[])
{
    int len;
    len = strlen_f(str);
    int i;
    for( i = 0; i < len; i++)
    {
        if(str[i] < 'a')
            str[i] = str[i] + ('a' - 'A');
    }
}
int strlen_f(char * str)//== (char str[])
{
    int len,i;
    for( i = 0;; i++)
    {
        if(str[i] == '\0')
        {
            len = i;
            break;
        }
    }
    return len;
}
int check_f(char * str)//if:void check_f()?
{
    int len,i;
    len = strlen_f(str);
    for( i = 0; str[i] != '\0'; i++)
    {
        if(str[i] < 'A' || str[i] > 'z' || str[i] > 'Z' && str[i] < 'a')
        {
            printf("ERROR\n");
            return -1;
        }
    }
    return 1;
}
int main()
{
    char str[105],flag = 'y';
    do
    {
        printf("Welcome Pig(),Please input the string now!\n");
        input_f(str);
        change_f(str);
        print_f(str);
        printf("\nDo you want again?\n");
        scanf("%c",&flag);
        lower_char_f(&flag);
    }
    while (flag == "yes" ||flag == 'y');
    return 0;
}


求解~
搜索更多相关主题的帖子: color 
2014-02-03 19:53
kindboy18
Rank: 2
等 级:论坛游民
威 望:1
帖 子:28
专家分:84
注 册:2014-1-24
收藏
得分:20 
在scanf下面加一句getchar();就OK了。求给分,嘻嘻~
2014-02-03 20:39
Sornets
Rank: 2
等 级:论坛游民
帖 子:102
专家分:61
注 册:2012-11-22
收藏
得分:0 
回复 2楼 kindboy18
这样虽然能输入了,但好像不是给flag的。

我的想法是在scanf输入flag的值,是y的话就继续do..while循环,不是的话就跳出循环结束。

但现在scanf也没有起作用,do..while也没有起作用
2014-02-04 11:12
Sornets
Rank: 2
等 级:论坛游民
帖 子:102
专家分:61
注 册:2012-11-22
收藏
得分:0 
回复 2楼 kindboy18
哦哦 明白了!用在scanf前面加个getchar()是读的之前的回车吧!
2014-02-04 11:15
韶志
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:斗气大陆
等 级:贵宾
威 望:44
帖 子:2223
专家分:13592
注 册:2013-3-22
收藏
得分:0 
缓冲区的清空。。   fllush(stdin);也可以

三十年河东,三十年河西,莫欺少年穷!
2014-02-04 11:38
kindboy18
Rank: 2
等 级:论坛游民
威 望:1
帖 子:28
专家分:84
注 册:2014-1-24
收藏
得分:0 
回复 4楼 Sornets
问题解决了否?
2014-02-04 12:06
Sornets
Rank: 2
等 级:论坛游民
帖 子:102
专家分:61
注 册:2012-11-22
收藏
得分:0 
回复 6楼 kindboy18
已经解决了:)
2014-02-04 14:53
kindboy18
Rank: 2
等 级:论坛游民
威 望:1
帖 子:28
专家分:84
注 册:2014-1-24
收藏
得分:0 
怎么解决的
2014-02-04 15:28
Sornets
Rank: 2
等 级:论坛游民
帖 子:102
专家分:61
注 册:2012-11-22
收藏
得分:0 
回复 8楼 kindboy18
就是在scanf前面加个getchar(),因为在之前的输入中有个回车,没有getchar的话flag会读回车。
2014-02-04 16:21
MusicSky
Rank: 2
等 级:论坛游民
帖 子:10
专家分:19
注 册:2013-7-16
收藏
得分:0 
加个getchar() 是一条代码,其实可以简单下
flag=='\ny'

y前面加\n OK
2014-02-06 05:13
快速回复:为什么我的do..while不被触发呢???
数据加载中...
 
   



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

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