如何使用从c

时间:2015-09-10 03:22:36

标签: c file-io

我有一个文件,其中包含目录中每个文件的文件名。我试图打开该文件,从中读取文件名,然后打开每个文件。但是,我无法让它打开文件。我打印它正在阅读的单词并知道它正确读取;但是,它不会打开文件。有什么建议?我的节目如下。

#include <stdio.h>
#include <dirent.h>
#include <string.h>
#include <stdlib.h>

int main(void)
{

FILE *in;
FILE *in2;
char inName[] = "inputfile.txt";
char *inName2;
inName2 = malloc(36 * sizeof (char));
char inPhrase[100]; 

if (( in = fopen(inName, "r")) == NULL ) 
{
    printf("Can't open %s for reading.\n", inName);
    return 2;
}

else 
{
    fgets(inName2, 36, in);
}

if (( in = fopen(inName2, "r")) == NULL )
{
    printf("Can't open %s for reading. \n", inName2);
}

else
{
    fgets(inPhrase, 100, in2);
    printf("%s\n", inPhrase);
}

fclose(in);
fclose(in2);
return 0;
}

2 个答案:

答案 0 :(得分:2)

您的代码中有一个完全错误和一个错误。第if (( in = fopen(inName2, "r")) == NULL )行应改为in2if (( in2 = fopen(inName2, "r")) == NULL )。你的错误信息几乎肯定是这样的:

Can't open test_file.txt
for reading

请注意fgets总是为您读取的换行符。你应该以某种方式修剪线。有几种选择:

  1. 如果您的最后一行确保换行符,则只需删除每行中的最后一个字符:strchr(inName2, '\0')[-1] = '\0';
  2. 您可以从每行的末尾修剪空白。
  3. 您可以删除最后一个字符\n(或者可能是两个字符,Windows上为\r\n
  4. 最后说明:您应该始终发布错误消息。如果你足够聪明,可以在第一时间正确地解释它,你就不会在这里发帖,所以不要指望我们接受你的程序失败的地方。

答案 1 :(得分:1)

这样做

#include <stdio.h>
#include <stdlib.h>

int main() {
    char inName[] = "inputfile.txt", * inName2;
    FILE * in = fopen(inName, "r"), * in2;
    char inPhrase[100];
    size_t len;

    // Check whether file opened correctly or display error
    if (in == NULL) { perror(inName); return 1; }

    // Read file line by line
    while (getline(&inName2, &len, in) != -1) {
        // Check if file opens otherwise go to next file
        if ((in2 = fopen(inName2, "r")) == NULL) { perror(inName2); continue; }
        // Read 100 chars from each file and display
        fgets(inPhrase, 100, in2);
        printf("%s\n", inPhrase);
        fclose(in2);
    }

    fclose(in);
    return 0;
}