Программирование на C: Как поместить целые, двойные и строковые значения из пользовательского ввода в 3 отдельных массива? - PullRequest
0 голосов
/ 15 сентября 2018

Я пытаюсь создать программу на C, которая вводит текстовый файл и печатает определенный вывод.

Это текстовый файл в следующем формате, который я буду использовать, называемый input.txt:

  1 35.026172 OfxDTW
  2 11.881445 sMLZrs
  3 64.033097 sQkGmn
  4 96.968208 Mhbfka
  5 75.157107 yWtcBI
  6 27.852157 svSzwI
  7 38.371393 UGGpRX
  8 54.500524 LOHGPL
  9 45.875275 aAwiSd
 10 18.583704 OYpIiO

Я хочу поместить целое число, двойное число и строку в 3 отдельных массива, а не помещать всю строку в один массив.

Файл txt будет введен как:

 program < input.txt

Вот моя основная программа:

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

#define MAX 10000

int
main(int argc, char* argv[]) {
    int number[MAX];
    double decimal[MAX];
    char *string[6][MAX];
    char str[6];
    int a;
    double b;
    int i=0,k=0,j=0;
    int ch=0;
    while ((ch = getchar()) != EOF) {
        if (scanf("%d ", &a)==1) {
            number[i] = a;
            i += 1;
        }

        if (scanf("%lf ", &b)==1) {
            decimal[j] = b;
            += 1;
        }

        if (scanf("%s", str)==1) {
            string[6][k]=str;
            k += 1;
        }
    }

    printf("n: %d, ", number[4]);
    printf("d: %lf, ", decimal[4]);
    printf("s: %s", string[6][4]);
    return 0;
}

Для вывода я просто хочу напечатать 5-ю строку txt-файла с добавленным текстом:

 n: 5, d: 75.157107, s: yWtcBI

Однако программа не печатает правильный вывод.

Кто-нибудь знает, что не так с моей программой и как я могу это исправить?

1 Ответ

0 голосов
/ 15 сентября 2018

Я взял на себя упрощение и легкую настройку вашего кода

#include <stdlib.h>

#define MAX 10000

int main(void) {
    int number[MAX];
    double decimal[MAX];
    char string[MAX][7];
    int i;

    for (i = 0; i < MAX; i++) {
        if (scanf("%d%lf%6s", number+i, decimal+i, string+i)!=3) break;
    }

    if (i > 4) {
        printf("n: %d, d: %f, s: %s\n", number[4], decimal[4], string[4]);
    }
    return 0;
}
...