从c中获取文件中的字符

时间:2014-03-21 16:14:22

标签: c file-io char

我想获取文本文件的字符。但我想分开(文本中的空格分隔字符)。这是我现在的代码。

main(){
    FILE *input_file = fopen("text.txt", "r");
    char char_check;
    char *string;
    int i = 0;

    while ((char_check = fgetc(input_file)) != EOF ){
        string = "";//resets the string here
        while(number_check != ' '){
            string[i] = number_check;
            i++;
        }
        printf("%s\n", string);
    }
}

如果text.txt具有“这是一个文本”的预期结果。在上面: 这个\ n是\ n \ n \ n文本。

2 个答案:

答案 0 :(得分:3)

如果您尝试逐个字符地打印文件,则可以打印出每个字符后跟一个空格。

main(){
    FILE *input_file = fopen("text.txt", "r");
    int number_check;

    while ((number_check = fgetc(input_file)) != EOF ){
        printf("%c ", number_check);
    }
}

答案 1 :(得分:0)

关于您作为对我的请求的回复的上次编辑,让我们检查您对原始文本所做的修改以获得所需的结果。原文如下:

    This is a text.

你已经把它变成了:

    This\n is\n a\n text.

我希望你的眼睛和我的眼睛一样清楚;但是,在每次出现空格'\n'之前,您已经插入了换行符' '。所以,你可以做到这一点;

  • while循环中循环前获得一个字符,这个循环将在文件结束时结束
  • if获取的字符为' ',然后打印'\n'
  • 之后打印获得的角色,无论它是什么

像这样:

...
    while ( ( char_check = fgetc( input_file ) ) != EOF ){
        if ( char_check == ' ' ) {
            printf( "\n" );
        }
        printf( "%c", char_check );
    }
...

您的代码存在一些问题,导致它根本无法运行。您正在使用尚未初始化的名为number_check的变量。您正在尝试为任何string[i]分配值i,您可能不会这样做。

要做到这一点,首先需要一个空间。要有空间,你可以;

// initialize string as an array
// which will automatically allocate memory for you to use
char string[123];

// manually allocate a memory to use
char * string;
string = malloc( 123 );

// or better
string = malloc( 123 * sizeof( char ) );

// or even better
string = malloc( 123 * sizeof( * string ) );

// but if you use malloc, remmeber to use free, to free the memory after using it
// !! only if you use malloc/calloc/realloc !!
free( string );

忘记赋值string = "";,它不会清空一个数组,也不会像你希望的那样授予你一个空数组。

在开始每个循环之前,只需将i重置回0并覆盖之前的字符。

添加一个带有'\0'的字符序列(字符串),它只是零,是必须的。如果您不这样做,printf( "%s", string );将无法知道您的字符串何时结束。您可以将零(终止零)视为整个字符串的完整句点。

无论如何,我认为这些信息应该足够了。让我们重新编写您的原始代码,让它工作:

#include <stdio.h>
#include <stdlib.h>     // <-- included stdlib.h for malloc

int main( ){
    FILE *input_file = fopen( "text.txt", "r" );
    char char_check;
    char *string;
    int i = 0;

    string = malloc( 321 * sizeof( *string ) );     // <-- allocated memory for string

    while ( ( char_check = fgetc( input_file ) ) != EOF ){

        i = 0;      // <-- resetting i back to zero

        while ( char_check != ' ' && char_check != EOF ){   // <-- added an EOF check
            string[i] = char_check;
            i++;
            char_check = fgetc( input_file );   // <-- added this, to obtain next
        }
        string[i] = '\0';               // <-- appended with zero, important

        printf( "%s\n ", string );      // <-- added a space after the \n
    }

    free( string );     // freed the allocated memory after use

    return 0;
}