huangch 发表于 2008-7-23 22:45

无法实现打印与第一个参数指定的模式匹配的行

本人是学c的莱鸟;在这里向各位高手请教!
下面函数是用来实现:打印与第一个参数指定的模式匹配的行的
#include<stdio.h>
#include<string.h>

#define MAXLINE 1000

int getline(char *line, int max)
{
        int c;
        char *t = line;

        while (--max > 0 && (c=getchar()) != EOF && c != '\n')
                 *line++ = c;
        if (c == '\n')
                 *line++ = c;
        *line = '\0';
        return (line - t);
}

void main(int argc, char *argv[])
{
        char line[MAXLINE];
        int found = 0;

        if (argc != 2)
                printf("Usage: find pattern\n");
    else
                while (getline(line, MAXLINE) > 0)
                        if (strstr(line, argv[1]) != NULL) {
                                printf("%s", line);
                        }
}
vc编译器并没有指示错误!
但vc命令行中输入为:hello world!
然后再一次运行程序时,
却总是出现:Usage: find pattern
为什么会这样呢??
向各位请教了!

huangch 发表于 2008-7-23 23:00

????

VxWorks 发表于 2008-7-23 23:22

命令行参数用空白字符分割,所以hello world!是两个参数,此时argc等于3
加一个输出试试:
if (argc != 2)
{
        printf("argc=%d\n",argc);
        printf("Usage: find pattern\n");
}

getling中这一句的t怎么没见定义:
return (line - t);

huangch 发表于 2008-7-23 23:32

[quote][bo][un]VxWorks[/un] 在 2008-7-23 23:22 的发言:[/bo]

命令行参数用空白字符分割,所以hello world!是两个参数,此时argc等于3
加一个输出试试:
if (argc != 2)
{
        printf("argc=%d\n",argc);
        printf("Usage: find pattern\n");
}

getling中这 ... [/quote]
谢谢哦!
加上printf("argc=%d\n",argc);
发现argc是等于3;
我将if (argc != 2)改为:
if (argc != 3)就实现了!
谢谢!t有定义
char *t = line;

VxWorks 发表于 2008-7-23 23:35

哎,人老了,这眼睛是越来越不行了[tk01]

页: [1]

编程论坛