| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 574 人关注过本帖
标题:为什么我的代码编译通过了,但是一运行就出错呢?
只看楼主 加入收藏
Sornets
Rank: 2
等 级:论坛游民
帖 子:102
专家分:61
注 册:2012-11-22
结帖率:58.82%
收藏
已结贴  问题点数:20 回复次数:9 
为什么我的代码编译通过了,但是一运行就出错呢?
这是今天自己写的小程序,就是输入一串字符,如果全是字母的话,如果首字母是元音字母,就在最后加'py',如果首字母是非元音,就把第一个删掉,在最后加上'py'。

但是输完字符串,一按回车就出错了。

程序代码:
#include <stdio.h>
#include <stdlib.h>
void input_f(char str[])
{
    scanf("%s",str);
    if(!check_f(str))
        printf("ERROR");
    //eturn 0;
}
void change_f(char * str)
{
    int len;
    lower_f(str);
    len = strlen_f(str);
    if(len >= 100)
    {
        printf("Too Long!");
        return 0;
    }
    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(int * 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; str[i] != '\0'; i++)
    {
        if(str[i] < 'A' || str[i] > 'z' || str[i] > 'Z' && str[i] < 'a')
            return -1;
    }
    return 1;
}
int main()
{
    char str[105],flag;
    printf("Welcome Pig(),Please input the string now!");
    input_f(str);
    change_f(str);
    print_f(str);
    printf("Do you want again?");
    scanf("%c",&flag);
    lower_char_f(flag);
    return 0;
}


求大神指点!跪谢~
搜索更多相关主题的帖子: 字符串 字母 
2014-02-03 17:07
li_local
Rank: 2
等 级:论坛游民
帖 子:35
专家分:59
注 册:2013-11-21
收藏
得分:0 
代码自己调试过么? 单个函数功能测试正常么?
2014-02-03 18:18
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
分模块调式

DO IT YOURSELF !
2014-02-03 18:26
kindboy18
Rank: 2
等 级:论坛游民
威 望:1
帖 子:28
专家分:84
注 册:2014-1-24
收藏
得分:20 
代码已调试通过,首个是非元音字母你之前的代码也是有问题的,我也给你做了优化,求给分
2014-02-03 19:06
kindboy18
Rank: 2
等 级:论坛游民
威 望:1
帖 子:28
专家分:84
注 册:2014-1-24
收藏
得分:0 
#include <stdio.h>
#include <stdlib.h>

void input_f(char str[]);
void change_f(char *str);
void print_f(char str[]);
void lower_char_f(char * str);
void lower_f(char str[]);
int strlen_f(char *str);
int check_f(char *str);

//void input_f(char str[])
void input_f(char *str)
{
    scanf("%s",str);
    if(!check_f(str))
        printf("ERROR");
    //eturn 0;
}

void change_f(char *str)
{
    int len;
    lower_f(str);
    len = strlen_f(str);
    if(len >= 100)
    {
        printf("Too Long!");
        //return 0;
    }
    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[])
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[])
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')
            return -1;
    }

    return 1;
}

int main()
{
    char str[105],flag;
    printf("Welcome Pig(),Please input the string now!");
    input_f(str);
    change_f(str);
    print_f(str);
    printf("Do you want again?");
    scanf("%c",&flag);
    lower_char_f(&flag);

    return 0;
}
2014-02-03 19:06
Sornets
Rank: 2
等 级:论坛游民
帖 子:102
专家分:61
注 册:2012-11-22
收藏
得分:0 
图片附件: 游客没有浏览图片的权限,请 登录注册

我们老师教的调试是这么调试,但是一输入字符串回车就这样了,没法调试啊!
图片附件: 游客没有浏览图片的权限,请 登录注册
2014-02-03 19:06
kindboy18
Rank: 2
等 级:论坛游民
威 望:1
帖 子:28
专家分:84
注 册:2014-1-24
收藏
得分:0 
他的代码都是一些小问题,调试不通过是因为他的i没有赋初值
2014-02-03 19:10
Sornets
Rank: 2
等 级:论坛游民
帖 子:102
专家分:61
注 册:2012-11-22
收藏
得分:0 
回复 4楼 kindboy18
喔喔,谢谢!

能不能顺便说下我的为什么运行不了呢?我找不出错误来
2014-02-03 19:14
kindboy18
Rank: 2
等 级:论坛游民
威 望:1
帖 子:28
专家分:84
注 册:2014-1-24
收藏
得分:0 
int check_f(char * str)//if:void check_f()?
{
    int len,i;
    len = strlen_f(str);
    for( i; str[i] != '\0'; i++)
    {
        if(str[i] < 'A' || str[i] > 'z' || str[i] > 'Z' && str[i] < 'a')
            return -1;
    }
    return 1;
}

你的check_f这个模块的i没有初始值,这是一个问题,之后非元音字母也有一些问题,你可以用你之前写的元音字母模块的进行调试,看看结果,再把我给你的代码对比来看,你就知道你错在哪里了。
2014-02-03 19:32
Sornets
Rank: 2
等 级:论坛游民
帖 子:102
专家分:61
注 册:2012-11-22
收藏
得分:0 
回复 9楼 kindboy18
喔喔 谢谢了~
2014-02-03 20:19
快速回复:为什么我的代码编译通过了,但是一运行就出错呢?
数据加载中...
 
   



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

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