getc()用于在C中传入输入和文件读取

时间:2015-05-01 09:13:27

标签: c arrays input stdin getc

我必须在C中开发一个可以有两种输入的程序。

  1. 通过喂它一个字符串(我假设这个文件名< String1234455678,如果我错了请纠正我。)
  2. 通过从某些文件中读取数据。
  3. 我必须对其中的字符进行一些检查并将它们存储在一个数组中。但我想学习如何首先使用stdin中的getc()

    我的第一个问题是,我可以在两种情况下都使用getc()吗?

    我想遍历Feed行/文件中的每个字符,我假设代码看起来像这样:

    char Array1[];
    char charHolder;
    
    
    //If the file/feed has chars (!NULL), execute
    if ((charHolder = getchar())!=NULL){
        //Do something
        //Do some more
        //Finally append to Array1
        Array1[] = charHolder;
    }
    

    上面的代码可能存在一些问题。我想知道这种插入在C中是否有效(没有指定索引,它只会推送数组末尾的值)。另外,我从http://beej.us/guide/bgc/output/html/multipage/getc.html读到,getc(stdin)getchar()完全相同。我只想仔细检查这确实是真的,任何一个函数都适用于我必须读取数据的情况(从文件中提取并为程序提供字符串)。

    另外,我想知道如何从多个文件中读取字符。假设我的程序是作为programName file1 file2执行的。

    感谢您的时间和帮助!

    干杯!

    编辑1:

    我还想知道如何检查字符何时从文件/字符串Feed结束。我是否应该在两种情况下使用EOF?

    示例:

    while ((charHolder = getchar()) != EOF){
        //code
    }
    

1 个答案:

答案 0 :(得分:0)

以下是一个示例:

#include <stdio.h>

void do_read(FILE * file, int abort_on_newline) {
    char ch;

    while (1) {
        ch = getc(file);
        if (ch == EOF) {
            break;
        }
        if (abort_on_newline && ch == '\n') {
            break;
        }
        printf("%c", ch);
    }
}

int main(int argc, char * argv[])
{
    int i = 1;
    FILE * fp = NULL;

    if (1 == argc) {
        // read input string from stdin, abort on new line (in case of interactive input)
        do_read (stdin, 1);
    }
    else {
        // cycle through all files in command line arguments and read them
        for (i=1; i < argc; i++) {
            if ((fp = fopen(argv[i], "r")) == NULL) {
                printf("Failed to open file.\n");
            }
            else {
                do_read(fp,0);
                fclose(fp);
            }
        }
    }

    return 0;
}

像这样使用:

  1. 从stdin读取:echo youstring | youprogram,或者只是开始 yourprogram从用户那里获得输入
  2. 从文件中读取你的程序yourfile1 yourfile2 ...
  3. 是的,你可以在两种情况下都使用getc,是的,你应该检查两种情况下的EOF,除了交互输入。如果是二进制文件,您还需要使用feof函数来检查EOF。请参阅上面的代码以从多个文件中读取。