Удаление вывода мусора из пустых строк при чтении файла CSV в массив структур в C - PullRequest
0 голосов
/ 27 сентября 2019

Я создаю программу для чтения элементов файла CSV в массив структур.У меня есть часть чтения файла CSV и сохранения его в соответствии с инструкциями.Тем не менее, мой вывод состоит в том, чтобы печатать больше, чем нужно, и печатать мусор после этого.Любые рекомендации о том, как убрать этот дополнительный вывод.Любые рекомендации будут оценены!Ниже приведен ввод из файла CSV.

Mark IV Deluxe,21.99,5
Super Professional,14.49,55
Grand Super Deluxe,99.99,99
Awesome Deluxe,149.99,2
Deluxe 2000,20,92
Nearly Deluxe 200,19.99,23
Almost Awesome Mark II,10.49,56
Revised Model 2.5,25.49,8
Potentially Professioanl Mark IV,12.99,77
Suboptimal Super 500,99.49,27
Less Than Stelar 600 Mark III,6.99,42

Это мой код.

#include <stdio.h>
#include <string.h>
#include <ctype.h>
#define MAX_ARRAY_ELEM 64

struct stock {

    char name_item[MAX_ARRAY_ELEM];
    float price;
    int stock_num;
};

void print_iteration(struct stock stuff[], int size);
void stock_print_state( struct product_info d );

int main(int argc, char *argv[]) {

    struct stock info[MAX_ARRAY_ELEM];
    char heading[MAX_ARRAY_ELEM];


    FILE * fp;
    fp = fopen(argv[1], "r");


    int f = 0;
    if (fp == NULL) {
        printf("No file provided.\n");
    }

    else if (fp != NULL) {

        fscanf(fp, "%s\n", heading);
        while(fscanf(fp, "%[^,],%f,%d", info[f].name_item,
        &info[f].price, &info[f].stock_num) == 3) {
            f++;
        }
    }
    fclose(fp);
    print_iteration(info, MAX_ARRAY_ELEM); //change MAX_ARRAY_ELEM to f that was       
                                           //incremented above
}

void stock_print_state(struct stock s){

    printf("%s: $%0.2f \n", s.item, s.item_price * s.num_of_items);
}

void print_iteration(struct stock stocks[], int arr_elems) {

    int i;
    for (i = 0; i < arr_elems; i++) {
        print_products(stocks[i]);
    }
}

Ниже вывод, который я получаю.

Mark IV Deluxe: $ 109,95

Супер-профессионал: $ 796,95

Grand Super Deluxe: $ 9899,01

Awesome Deluxe: $ 299,98

Deluxe 2000: $ 1840,00

Почти Делюкс 200: 459,77

Почти Потрясающий Марк II: 587,44

Пересмотренная модель 2.5: 203,92

Потенциально Профессиональный Марк IV: 1000,23

Неоптимальный Супер500: $ 2686,23

Менее, чем Stelar 600 Марк III: $ 293,58

: $ 0,00: $ 0,00: $ 0,00: $ 0,00: $ 35742271459613871000000000000000,00: 0,00 $ alКал:: 356869219998886340000000000000000000000000000000000000000. csmα: $ -1 # R: $ 35487717621184175000000000000000,00 дгл ·: $ 0,00 0: $ 38133850722931264000000000000000,00: $ 36668845400502585000000000000000,00 ÷ б: $ 1 # R |: $ 0,00: $ 0,00: $ 0,00 à ■: $ 38133850722931264000000000000000.00: $ 38388544796756035000000000000000.00: $ 38135492444194300000000000000000.00 PÉ @: $ 0,00 d {ql ·: $ 0,00: $ 0,00: $ 0,00 p] |: 0,00;: $ 0,00: $ 0,00 H: $ 0,00: $ 0,00 8: $ 0,00: $ 0,00: $ 0,00: $ 0,00: $ 0,00: $ -0,00 z @: $ 0,00 H: $ 0,00: $ 0,00: $ 0,00: $ 0,00 ùtl ·: $ 35907625915369120000000000000000,00 8: $ 0,00: $ 0,00

Всего: -1. # R

Процесс завершен через 0,03642 секунды с возвращаемым значением 12 Нажмите любую клавишу для продолжения.,.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...