花算子 2024-08-10 21:39 采纳率: 83.3%
浏览 17
已结题

《C程序设计语言》第4章第一个例题无法输出

《C程序设计语言》第4章第一个例题:
要把输入进来的所有带“ould”的行给输出回去。可是无论输入的是什么,都不会输出。

#include <stdio.h>
#define  MAX_INPUT 1000
#define  PARTEN    "ould"

int get_line(char line[], int max)
{

    char ch;
    int i = 0;

    while(--max > 0 && (ch = getchar()) != EOF && ch != '\n')
    {

        line[i++] = ch;

    }
    if(ch == '\n')
    {

        line[i++] = ch;

    }

    line[i] = '\0';

    return i;

}

int string_index(char string[], char word[])
{

    int i, j, k;

    for(i = 0; string[i] != '\0'; i++)
    {

        for(j = i, k = 0; word[k] != '\0' && string[j] == word[k]; j++, i++)
        {

            ;

        }
        if(k > 0 && word[k] == '\0')
        {

            return i;

        }

    }

    return -1;

}

int main()
{

    char line[MAX_INPUT];
    int found = 0;

    while(get_line(line, MAX_INPUT) > 0)
    {

        if(string_index(line, PARTEN) >= 0)
        {

            printf("%s", line);
            found++;

        }

    }

    return found;

}


  • 写回答

17条回答 默认 最新

  • micthis 2024-08-10 23:07
    关注

    只需要改一处。
    for(j = i, k = 0; word[k] != '\0' && string[j] == word[k]; j++, i++)
    应该是k++:
    for(j = i, k = 0; word[k] != '\0' && string[j] == word[k]; j++, k++)
    修改后的完整代码:

    #include <stdio.h>
    #define  MAX_INPUT 1000
    #define  PARTEN    "ould"
    int get_line(char line[], int max)
    {
        char ch;
        int i = 0;
        while(--max > 0 && (ch = getchar()) != EOF && ch != '\n')
        {
            line[i++] = ch;
        }
        if(ch == '\n')
        {
            line[i++] = ch;
        }
        line[i] = '\0';
        return i;
    }
    int string_index(char string[], char word[])
    {
        int i, j, k;
        for(i = 0; string[i] != '\0'; i++)
        {
            //i++改成了k++
            for(j = i, k = 0; word[k] != '\0' && string[j] == word[k]; j++, k++)
            {
                ;
            }
            if(k > 0 && word[k] == '\0')
            {
                return i;
            }
        }
        return -1;
    }
    int main()
    {
        char line[MAX_INPUT];
        int found = 0;
        while(get_line(line, MAX_INPUT) > 0)
        {
            if(string_index(line, PARTEN) >= 0)
            {
                printf("%s", line);
                found++;
            }
        }
        return found;
    }
    

    运行截图:

    img

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(16条)

报告相同问题?

问题事件

  • 系统已结题 8月19日
  • 已采纳回答 8月11日
  • 创建了问题 8月10日