我如何从文本文件中输入文本 (c)

太阳航海者

使用 2D 数组进行输入时,如何使用 fgets 从文本文件中输入文本?

main(){

    char text[1000][1000];
    FILE *fptr;
    char fname[100];
    printf("input file name:");
    scanf("%s",fname);
    fptr=fopen(fname,"w");
    if(fptr==NULL){
        printf("Error in opening file");
        exit(1);
    }
    else{
    }
}
用户3629249

以下建议代码:

  1. 干净地编译
  2. 执行所需的功能
  3. 正确检查错误
  4. 退出前正确清理
  5. 记录哪些头文件公开哪些函数和哪些#defines

现在建议的代码:

#include <stdio.h>    // FILE, printf(), scanf(), fprintf()
                      // fopen(), fclose(), stderr, fflush()
#include <stdlib.h>   // exit(), EXIT_FAILURE, realloc()
#include <string.h>   // strdup()

#define MAX_FILENAME_LEN 99
#define MAX_LINE_LEN 1000

int main( void )
{
    FILE *fptr;
    char filename[ MAX_FILENAME_LEN +1 ];

    printf("input file name:");
    fflush( stdout );
    if( scanf( "%99s", filename ) != 1 )
    {
        fprintf( stderr, "scanf failed to read the file name\n" );
        exit( EXIT_FAILURE );
    }

    // implied else, scanf successful

    fptr = fopen( filename, "w" );
    if( !fptr )
    {
        perror( "fopen failed" );
        exit( EXIT_FAILURE );
    }

    // implied else, fopen successful

    char **savedText = NULL;
    size_t numLines = 0;
    char line[ MAX_LINE_LEN ];

    while( fgets( line, sizeof(line), fptr ) )
    {
        char *temp = realloc( savedText, (numLines+1)*sizeof(char*) );
        if( !temp )
        {
            perror( "realloc failed" );
            fclose( fptr );
            for( size_t i=0; i<numLines; i++ )
            {
                free( savedText+i );
            }
            free( savedText );
            exit( EXIT_FAILURE );
        }

        // implied else, realloc successful

        *savedText = temp;
        savedText[ numLines ] = strdup( line );
        if( !savedText+numLines )
        {
            perror( "strdup failed" );
            fclose( fptr );
            for( size_t i=0; i<numLines; i++ )
            {
                free( savedText+i );
            }
            free( savedText );
            exit( EXIT_FAILURE );
        }

        // implied else, strdup successful

        numLines++;

    } // end while()

    fclose( fptr );
    for( size_t i=0; i<numLines; i++ )
    {
        free( savedText[ i ] );
    }
    free( savedText );
    return 0;
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在C ++中打开文本文件的输入验证

从文本文件C ++读取输入

C:如何仅从未知大小的文本文件中输入int数据

如何从C#中的文本文件获取数据

如何在C#中解析文本文件?

如何在C中读取大文本文件

如何在c中打印文本文件的内容

在C ++中,如何提取文本文件的FileFilePath

如何从C ++中的文本文件读入?

如何从C中的文本文件填充矩阵(结构)?

如何读取在C#中不断更新的文本文件中输入的最后一行

将用户输入保存到文本文件C ++

使用C从文本文件读取输入参数

C编程错误相关的文本文件输入

我将如何使用 C++ 将纯文本文件中的单词存储到数组中?

将文本文件输入到c中的2d数组中

使用 BASH 的文本文件中的输入重定向以用作 C 程序中的数据

如何从C#中的文本文件中提取特定文本

如何将输入文本文件链接到 C++ 程序

如何使用C#向包含用户输入的文本文件写入和读取列表

如何在文本文件中将此表输入C?

ingore从C语言文本文件中读取数据时输入(换行)

c lang文本文件输入行中的数字总和

我想从 C# 中的文本文件中搜索、删除和更新

除非复制并粘贴文本,否则在C ++程序中输入的文本文件将无法工作

我正在尝试在C#中写入文本文件

在我的C程序中创建函数?-获取2个文本文件的统计信息

Vector 没有填充我的文本文件 C++ 中的信息

文本文件中C#中的StreamWriter限制