程序问答   发布时间:2022-06-01  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了如何使用 fscanf 读取文件以初始化 C 中的值?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决如何使用 fscanf 读取文件以初始化 C 中的值??

开发过程中遇到如何使用 fscanf 读取文件以初始化 C 中的值?的问题如何解决?下面主要结合日常开发的经验,给出你关于如何使用 fscanf 读取文件以初始化 C 中的值?的解决方法建议,希望对你解决如何使用 fscanf 读取文件以初始化 C 中的值?有所启发或帮助;

假设我有如下所示的 ClIEnt.txt 文件。 Client.txt file picture

1111
name One
Email.email.1
111-111-1111
2222
name Two Two
Email.email.2
222-222-2222
3333
name Three Three
Email.email.3
333-333-3333

客户端 txt 文件包含 客户的 ID、姓名、电子邮件和电话号码。

现在的任务是从 ClIEnt 文件中读取并将 ID、姓名、电子邮件和电话号码保存到一个名为 ClIEnt 的结构体中。 从这个客户端文本文件中,我将创建三个结构值,这些值将被推送到结构列表中。

但由于我只是在学习如何使用 fscanf,并且在尝试练习 fscanf 时,我将任务范围缩小为: 如何从文本中读取并初始化第一个客户端的值?

这是我尝试的。

int main(voID){
    file *fPtr;
    if((fPtr = fopen("ClIEnt.txt"),"r") == NulL){
        puts("file Could not be found.");
    }
    else{
        //First ClIEnt
        int clIEntID;//1111
        char clIEntname[30];//name One
        char clIEntEmail[30];//Email.email.1
        char clIEntPhone[30];//111-111-1111

        //Initialize the first clIEnt.
        fscanf(fPtr,"%d%s%s%s",&clIEntID,clIEntname,clIEntEmail,clIEntPhone);

        //While not end of the file,initialize rest of the clIEnts.
        while(!feof(fPtr)){
            //Have not yet implemented.
        }
        fclose(fPtr);

    }
}

如何将第一个客户端值初始化为

 clIEntID = 1111
 clIEntname[30] = name One
 clIEntEmail[30] = Email.email.1
 clIEntPhone[30] = 111-111-1111

解决方法

这是一个解决方案,不使用 scanf 而是使用 getline

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


typedef struct Client_s
{
        int clientId;
        char clientName[30];
        char clientEmail[30];
        char clientPhone[30];
} Client;

Client* get_next_client(FILE *f_ptr)
{
        Client *new_client = malloc(sizeof(Client));
        char *buff = malloc(30);
        size_t size = 30;
        int error = 0;

        if (new_client == NULL || buff == NULL)
                return NULL;

        if (getline(&buff,&size,f_ptr) <= 0)
                return NULL;
        new_client->clientId = atoi(buff);
        if (getline(&buff,f_ptr) <= 0)
                return NULL;
        strncpy(new_client->clientName,buff,strlen(buff) - 1);
        if (getline(&buff,f_ptr) <= 0)
                return NULL;
        strncpy(new_client->clientEmail,f_ptr) <= 0)
                return NULL;
        strncpy(new_client->clientPhone,strlen(buff) - 1);

        free(buff);
        return new_client;
}

int main(int ac,char **av)
{
        FILE * f_ptr = fopen("Client.txt","r");

        if (f_ptr == NULL)
        {
                write(2,"Could not open file\n",strlen("Could not open file\n"));
                return 1;
        }

        Client *client = get_next_client(f_ptr);
        while (client != NULL)
        {
                printf("%d\n",client->clientId);
                //handle client
                client = get_next_client(f_ptr);
        }

        fclose(f_ptr);

        return 0;
}

当您不再需要收到的客户端时,不要忘记释放它们。

希望能解决您的问题。

大佬总结

以上是大佬教程为你收集整理的如何使用 fscanf 读取文件以初始化 C 中的值?全部内容,希望文章能够帮你解决如何使用 fscanf 读取文件以初始化 C 中的值?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: