我想获取文本文件的字符。但我想分开(文本中的空格分隔字符)。这是我现在的代码。
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文本。
答案 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;
}