仅打印长度超过10个字符的输入行(ANSI C)

时间:2014-01-06 03:51:19

标签: c string file-io input output

所以我在C中编写一个练习程序,其目的是获取用户输入,然后在达到EOF后,它会读回输入但只读取超过10个字符的行。

我在Linux上,所以EOF是Ctrl + D,但是,如果输入行长于10,则在我按下Enter键时打印,而不是等到EOF到达。

这是我的代码:

#define MAXSIZE 1000
#define SIZE 10

int checklen(char line[], int index);

int main()
{
    char currentline[MAXSIZE];
    int i = 0;

        while ((currentline[i] = getchar()) != EOF){
            if (currentline[i] == '\n'){
                if (checklen(currentline, i) > SIZE){
                    printf("%s", currentline);
                }
            }
            ++i;
        }

    return 0;
}

int checklen(char line[], int index)
{
    int i;
        for (i=index; line[i] != '\n'; ++i){
            ;
        }
    return i;
}
编辑:我一直试图弄清楚它已经有一段时间没有运气了。我真的不明白你们在说些什么,但最终我们会到达那里:)

我已经重写了代码,但它仍然无效。

#include <stdio.h>

#define MAX 1000
#define SIZE 10

void examine(char input[], int index);

int main()
{
    int i=0;
    char input[MAX];
    char output[MAX];

        //take user input and store it in our input string
        while ((input[i] = getchar()) != EOF){
            ++i;
        }

        //put a null byte at the end of input[]
        input[i+1] = '\0';

        //examine line by line until end of string (null byte)
        for (i=0; input[i] != '\0'; ++i){
            if (input[i] == '\n'){
                examine(input, i);
            }
        }

    return 0;
}

void examine(char input[], int index)
{
    //decrement through input[] until \n or start [0] is reached
    int i=0;

        for (i=0; ((input[index] != '\n') || (index > 0)); ++i){
            --index;
        }
    //if line is bigger than 10 chars, print it 
    if (i>SIZE){
        for (; input[index+1] != '\n'; ++index){
            putchar(input[index]);
        }
    }

    //otherwise, return

    return;
}

2 个答案:

答案 0 :(得分:1)

重写了它。实际上真的很容易。这是代码:

/*this program takes keyboard input from the user until EOF
and prints out their input excluding lines less than or equal to LINESIZE*/

#include <stdio.h>

#define MAX 2000
#define LINESIZE 10

void checkprint(char line[]);

int main()
{
    char input[MAX];
    char line[MAX];
    int i, i2;
    i2 = 0;

        //take input until EOF (Ctrl + D)
        for (i=0; (input[i]=getchar()) != EOF; ++i){
            ;
        }

    //add null byte to end of string    
    input[i+1] = '\0';
    //basic formatting for aesthetics
    putchar('\n');


        //copy a line into line[] from input[] until NULL byte reached
        for (i=0; input[i] != '\0'; ++i){
            line[i2] = input[i];
            ++i2;
            //if end of line, call checkprint
            if (input[i] == '\n'){
                checkprint(line);
                i2=0;
            }
        }   

    return 0;
}

void checkprint(char line[])
{


    int i;
        //find the length of the line
        for (i=0; line[i] != '\n'; ++i){
            ;
        }

        //if longer than LINESIZE, print it
    if (i > LINESIZE){
        putchar('\n');
        for (i=0; line[i] != '\n'; ++i){
            putchar(line[i]);
        }
    }   
}

答案 1 :(得分:0)

#include <stdio.h>

#define MAX 1000
#define SIZE 10

void examine(char input[], int index);

int main(void){
    char input[MAX];
//  char output[MAX];
    int i, ch;

    for(i=0; i< MAX - 1 && (ch = getchar()) != EOF; ++i)
        input[i] = ch;

    input[i] = '\0';

    for (i=0; input[i] != '\0'; ++i){
        if (input[i] == '\n'){
            examine(input, i);
        }
    }
    examine(input, i);//for '\0'

    return 0;
}

void examine(char input[], int index){
    int i;

    if(index == 0) return ;

    for (i=1; index - i >= 0 && input[index-i] != '\n'; ++i)
        ;

    --i;
    if (i > SIZE){
        while(i>0)
            putchar(input[index - i--]);
        putchar('\n');
    }

    return;
}

缓冲区大小为11的版本。

#include <stdio.h>

#define SIZE 10

void print(char ch){
    static char buf[SIZE+1];
    static index = 0, over = 0;
    int i;

    if(over){
        putchar(ch);
        if(ch == '\n')
            over = 0;
        return ;
    }
    if(ch == '\n'){
        index = 0;
    } else {
        buf[index++] = ch;
        if(index == SIZE + 1){
            for(i=0;i<index;++i){
                putchar(buf[i]);
            }
            index = 0;
            over = 1;
        }
    }
}

int main(void){
    int ch;

    while((ch = getchar()) != EOF){
        print(ch);
    }

    return 0;
}
//simple is to use the fgets
相关问题