gpt4 book ai didi

c - 将分隔的文本文件保存到数组后返回指向数组的永久指针

转载 作者:太空宇宙 更新时间:2023-11-04 03:38:26 25 4
gpt4 key购买 nike

我正在尝试存储如下所示的文本文件:

Headphones-750, TV-1500, Keyboard-1200, Tablet-80, Speakers-400, DVD-250, Streamer-550, Mouse-50; 

进入 def 类型的数组:

    typedef struct item{
char* name;
int price;
}item;

typedef struct item{
char* name;
int product_code;
int price;
}item;



item *getProducts(){
FILE *fp;
fp = fopen("machinedata.txt", "r");

if (fp == NULL)
{
printf("Error while opening the file.\n");
exit(EXIT_FAILURE);
}

static item products[8];
int row = 0;

while (fscanf(fp,"%50[^-],%10[^,]",products[row].name,products[row].price) ){
products[row].product_code = row;
row++;
}

return products;
}

但它不会工作。我如何创建这个 typedef item 数组并返回一个指向数组的指针,我将能够从其他函数,特别是 main() 操作/打印该数组。

我正在用 C 编写代码,请寻找 C 指南

最佳答案

item 有一个 typedef。
item products[8]; 位于 main 中,可以传递给其他函数。
itemsname 成员是一个指针。需要为其分配内存以存储文件中的字符串。
格式字符串 "%50[^-]-%d%*c" 将跳过前导空格,最多扫描 50 个不是“-”的字符,扫描一个“-”,扫描一个整数并扫描并丢弃整数后面的一个字符。

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

typedef struct item{
char* name;
int product_code;
int price;
}item;

int getProducts ( item prods[], int size);

int main ( ) {
int read = 0;
int each = 0;
item products[8];

read = getProducts ( products, sizeof ( products) / sizeof ( products[0]));
for ( each = 0; each < read; each++) {
printf ( "%s %d %d\n", products[each].name, products[each].price, products[each].product_code);
}
for ( each = 0; each < read; each++) {
free ( products[each].name);//release memory
}
return 0;
}

int getProducts ( item prods[], int size) {
char name[51] = {0};
int row = 0;

FILE *fp;
fp = fopen("machinedata.txt", "r");

if (fp == NULL)
{
printf("Error while opening the file.\n");
exit(EXIT_FAILURE);
}

while ((fscanf(fp," %50[^-]-%d%*c",name,&prods[row].price))==2){
prods[row].name = malloc ( strlen ( name) + 1);//allocate memory for name
if ( prods[row].name == NULL) {
printf ( "Malloc failed\n");
break;
}
strcpy ( prods[row].name, name);//copy name into structure
prods[row].product_code = row;
row++;
if ( row >= size) {
break;
}
}

return row;
}

关于c - 将分隔的文本文件保存到数组后返回指向数组的永久指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30425964/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com