| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1546 人关注过本帖
标题:麻烦各位帮我看下我写的这个C代码有什么错误,谢谢了。
只看楼主 加入收藏
azzbcc
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:江西财经大学
等 级:贵宾
威 望:81
帖 子:3293
专家分:12919
注 册:2012-11-4
收藏
得分:0 
先说下,代码很漂亮,赏心悦目啊!

主要问题是对数组理解不够吧,字符串交换直接换指针,不可以的,数组毕竟不是指针

用strcpy,虽然麻烦了点


另外,你的switch没有break,这个问题也蛮严重的


[fly]存在即是合理[/fly]
2013-03-24 12:21
azzbcc
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:江西财经大学
等 级:贵宾
威 望:81
帖 子:3293
专家分:12919
注 册:2012-11-4
收藏
得分:0 
看来你对switch不熟练哪,后面加那句,其实可以用default的


[fly]存在即是合理[/fly]
2013-03-24 12:24
DarylL
Rank: 1
等 级:新手上路
帖 子:37
专家分:0
注 册:2012-12-6
收藏
得分:0 
自顶一下
2013-03-24 13:08
DarylL
Rank: 1
等 级:新手上路
帖 子:37
专家分:0
注 册:2012-12-6
收藏
得分:0 
回复 11楼 azzbcc
那我要怎么把所有的字符串都传递给函数呢?
2013-03-24 13:12
DarylL
Rank: 1
等 级:新手上路
帖 子:37
专家分:0
注 册:2012-12-6
收藏
得分:0 
自顶一下
2013-03-24 14:39
DarylL
Rank: 1
等 级:新手上路
帖 子:37
专家分:0
注 册:2012-12-6
收藏
得分:0 
自顶一下
2013-03-24 16:10
azzbcc
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:江西财经大学
等 级:贵宾
威 望:81
帖 子:3293
专家分:12919
注 册:2012-11-4
收藏
得分:0 
传参没问题的,就是交换,两个字符串交换,不是只交换首地址的


[fly]存在即是合理[/fly]
2013-03-24 16:18
DarylL
Rank: 1
等 级:新手上路
帖 子:37
专家分:0
注 册:2012-12-6
收藏
得分:0 
回复 17楼 azzbcc
我把主函数的一部分注释掉了,然后就想下面的一样:
程序代码:
/*    读入若干字符串,并按格式输出    */
#include <stdio.h>
#include <string.h>
#define ROW 10    /*    最大限制字符串的数目    */
#define LINE 100

int getns (char *, int);    /*    输入字符串的函数    */
void ascii (char **, int);    /*    按照ASCII顺序的函数    */
void length (char **, int);    /*    按长度递增顺序的函数    */
void first_length (char **, int);    /*    按手单词长度递增顺序的函数    */
int first_strlen (char *);    /*    比较首个单词长度的函数    */
void strlen1 (char *, int *, int);    /*    计算每个字符串长度的函数    */
void menu (void);    /*    输出菜单选项的函数    */
int main (void)
{
    char input[ROW][LINE];
    char *ptrinput[ROW];
    char choice;
    int row = 0;    /*    字符串的数目    */
    int i;    

    puts ("Please enter a series of sentence.");
    while (row < ROW && gets (input[row]))
    {
        if (*input[row] == EOF)
            break;
        ptrinput[row] = input[row];
        row++;
    }    /*    将字符串赋予指针    */
    length (ptrinput, row);
    /*menu ();
    while ((choice = getchar ()) != 'q')
    {
        if (choice == '\n')
            continue;
        switch (choice)
        {
            case 'a': 
            {
                for (i = 0; i < row; i++)
                    puts (ptrinput[i]);
            }
            case 'b': ascii (ptrinput, row);
            case 'c': length (ptrinput, row);
            case 'd': first_length (ptrinput, row);
        }
        if (choice != 'a' && choice != 'b' && choice != 'c' && choice != 'd')
            puts ("Please enter a, b, c, d or q:");
        menu ();
    }*/

    return 0;
}

/*    按照ASCII顺序的函数    */
void ascii (char ** p, int i)
{
    int j, k, l;
    char *output[ROW];

    for (j = 0; j < i; j++)
    {
        l = 0;
        for (k = 0; k < i; k++)
        {
            if (j == k)
                continue;
            if (strcmp (p[j], p[k]) >= 0)
                l++;
        }
        output[l] = p[j];
    }
    for (l = 0; l < i; l++)
        puts (output[l]);
}

/*    按长度递增顺序的函数    */
void length (char ** p, int i)
{
    int j, k, l;
    int length[ROW];
    char *output[ROW];

    for (j = 0; j < i; j++)
        strlen1 ((char *) p, length, i);
    for (j = 0; j < i; j++)
    {
        l = 0;
        for (k = 0; k < i; k++)
        {
            if (k == j)
                continue;
            if (length[j] > length[k])
                l++;
        }
        output[l] = p[j];
    }
    for (l = 0; l < i; l++)
        puts (output[l]);
}

/*    按手单词长度递增顺序的函数    */
void first_length (char ** p, int i)
{
    int j, k, l;
    char *output[ROW];

    for (j = 0; j < i; j++)
    {
        l = 0;
        for (k = 0; k < i; k++)
        {
            if (k == j)
                continue;
            if (first_strlen (p[j]) > first_strlen (p[k]))
                l++;
        }
        output[l] = p[l];
    }
    for (l = 0; l < i; l++)
        puts (output[l]);
}

/*    比较首个单词长度的函数    */
int first_strlen (char * p)
{
    int i = 0;

    while (p[i] >= 'a' && p[i] <= 'z' || p[i] >= 'A' || p[i] <= 'Z')
        i++;

    return i;
}

/*    计算每个字符串长度的函数(本程序未包含头文件“string.h”)    */
void strlen1 (char * p, int * i, int j)
{
    int k = 0;
    int length;
    int all_length = 0;

    while (k < j)
    {
        length = 0;
        while (p[all_length] != '\0')
        {
            length++;
            all_length++;
        }
        all_length++;
        i[k] = length;
        k++;
    }
}
/*    输出菜单选项的函数    */
void menu (void)
{
    puts ("************************************************************************");
    puts ("Please choose what to do:");
    puts ("a. 输出初始字符列表                b. 按ASCII顺序输出字符串");
    puts ("c. 按长度递增顺序输出字符串        d. 按字符串中第一个单词长度输出字符串");
    puts ("q. Quit.");
    puts ("************************************************************************");    
}

结果发现,当主函数被我注释那部分前面,我把case 'a'的代码写上去运行,没有任何错误,case 'b'的也没有任何错误,但是另外两个选项就有错误了。然后我把c选项的函数改了,改成这样。但还是不对。我真的不知道该怎么改了。不过我能断定,错误应该在被注释的那段代码中,和c、d两个选项的函数中。麻烦您再给看看。谢谢了!
2013-03-24 17:02
azzbcc
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:江西财经大学
等 级:贵宾
威 望:81
帖 子:3293
专家分:12919
注 册:2012-11-4
收藏
得分:13 
找到了,是最后两个函数

你的strlen1函数是什么功能?length没有达到目的

另外first_strlen函数,死循环,看看循环的条件


[fly]存在即是合理[/fly]
2013-03-24 17:31
shmilyflf
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:5
帖 子:356
专家分:1008
注 册:2012-12-9
收藏
得分:0 
蹭分中路过……
2013-03-24 17:46
快速回复:麻烦各位帮我看下我写的这个C代码有什么错误,谢谢了。
数据加载中...
 
   



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

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