1

我是 C 的新手,并且一直在尝试这样做一段时间。

我需要从具有以下内容的文本文件中读取整数值:

G = 10

P = 5

盖尔:1,2,3,4

价格:4,3,5,6.6

需要挑选出 Gayle 和 Price 值并将它们存储在 2 个单独的数组中,并将 G 和 P 值存储在 2 个单独的变量中。

到目前为止,我已经完成了:

FILE* file = fopen(abc.txt, "r");
//for gayle values
int g_array[100];
int i=0;
int gayle_val;
while(fscanf("%d", &gayle_val)==1)
{
    g_array[i]=gayle_val;
}
//for price values
int p_array[100];
int i=0;
int price_val;
while(fscanf("%d", &price_val)==1)
{
    p_array[i]=price_val;
}
//for G and P values

如何组合对 4 行的搜索,以便逐行完成读取并相应地存储值?

非常感谢您!

4

3 回答 3

3

之前已经回答过这个问题,我很确定在输入问题时已向您提出建议:

从字面上看你的问题的左边

于 2013-05-28T06:07:35.180 回答
0

simple E.G.

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

int main(void){
    int gayle_val, g_array[100], g_count, p_count;
    float price_val, p_array[100];
    int i;
    char line_buff[128], *p;
    FILE *file = fopen("abc.txt", "r");
    while(NULL!=fgets(line_buff, sizeof(line_buff), file)){
        if(strncmp("G = ", line_buff, 4) == 0){//simple match
            gayle_val = atoi(line_buff + 4);
        } else if(strncmp("P = ", line_buff, 4) == 0){
            price_val = atof(line_buff + 4);
        } else if(strncmp("Gayle: ", line_buff, 7) == 0){
            g_count = 0;
            for(p = line_buff + 7;NULL!=(p=strtok(p, ","));p=NULL){
                g_array[g_count++] = atoi(p);
            }
        } else if(strncmp("Price: ", line_buff, 7) == 0){
            p_count = 0;
            for(p = line_buff + 7;NULL!=(p=strtok(p, ","));p=NULL){
                p_array[p_count++] = atof(p);
            }
        }
    }
    fclose(file);

    //check print
    printf("gayle_val: %d\n", gayle_val);
    printf("gayle: ");
    for(i = 0;i<g_count;++i)
        printf("%d ", g_array[i]);
    printf("\n");
    printf("price_val: %g\n", price_val);
    printf("price: ");
    for(i = 0;i<p_count;++i)
        printf("%g ", p_array[i]);
    printf("\n");

    return 0;
}
于 2013-05-28T08:11:33.237 回答
0

我不会给您一个代码示例,而是会建议您如何将文件的内容插入单个数组而不是一个数组中。

尝试创建一个二维数组并将值分配给它,而不是拥有多个数组并使用FOR循环来执行此操作。

于 2013-05-28T06:01:40.447 回答