взять таблицу из txt файла и сохранить ее в массиве c

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

file.txt для чтения

 1989 500 222000
 1997 1500 180000
 1976 4000 20000
 1967 20000 10000

программа должна читать данные таблицы из стандартного ввода. следующим образом (из оболочки): % ./tsort file.txt

мой код до сих пор

int main( int argc, char *argv[] ) {
     FILE *inputFile;
     inputFile = fopen( argv[2], "r" );
     int number;

    while(fscanf(inputFile, "%i", number)==1)
    {
            printf("%i", number);
    }

return 0;

   }

person nike0505    schedule 20.09.2013    source источник
comment
Как правило, мы не делаем за вас домашнюю работу, но мы поможем вам понять, почему ваша попытка решить проблему не работает. Итак, продолжайте и приложите все усилия, и если вы не можете понять это, спросите еще раз. Компилируемый пример — хорошее место для начала. whathaveyoutried.com   -  person Charlie Burns    schedule 20.09.2013
comment
Что вы уже умеете делать на C?   -  person paddy    schedule 20.09.2013
comment
Несколько вопросов для размышления: — Это предназначено для чтения в одномерный или двумерный массив? Вне зависимости от того, как вы собираетесь размещать массив — как обычную локальную переменную или динамически с помощью malloc()? И как вы собираетесь гарантировать, что вы не выйдете за границы массива, в который вы читаете? Ответы будут направлять части вашего кодирования. Обратите внимание, что если вы пишете ./tsort file.txt, данные не должны считываться со стандартного ввода; он должен быть прочитан из файлов, указанных в командной строке. Если бы он исходил из стандартного ввода, вы бы написали ./tsort < file.txt.   -  person Jonathan Leffler    schedule 20.09.2013
comment
@JonathanLeffler Это то, что у меня есть до сих пор, и оно ничего не печатает, можете ли вы указать на мою проблему? int main( int argc, char *argv[] ) { FILE *inputFile; inputFile = fopen(argv[2], r); внутренний номер; while(fscanf(inputFile,%i,число)==1) { printf(%i,число); } вернуть 0; }   -  person nike0505    schedule 20.09.2013
comment
@nike0505 — пожалуйста, отредактируйте свой вопрос — разместите там свой код. Спасибо.   -  person jim mcnamara    schedule 20.09.2013
comment
Вам нужно использовать &number в fscanf   -  person dcaswell    schedule 20.09.2013
comment
@user814064 user814064, когда я набираю ./tsort file.txt, я получаю ошибку сегментации   -  person nike0505    schedule 20.09.2013
comment
Потому что вам нужно сделать это while(fscanf(inputFile, "%i", &number)==1)   -  person dcaswell    schedule 20.09.2013
comment
@user814064 user814064 да, я пытался сделать это с помощью while(fscanf(inputFile, %i, &number)==1)   -  person nike0505    schedule 20.09.2013
comment
Является ли имя файла argv[2]? попробуйте argv[1]. argv[0] — имя программы. В C массивы начинаются с нуля. Если бы вы распечатали имя программы, вы бы это увидели.   -  person dcaswell    schedule 20.09.2013
comment
@user814064 user814064 Я пытался поиграться с argv[2],argv[1], argv[0]. и продолжайте получать ту же ошибку сегментации   -  person nike0505    schedule 20.09.2013
comment
Ваш код теперь считывает каждое число из файла по очереди в переменную number; это хорошо (хотя вы должны убедиться, что вам удалось открыть файл, прежде чем использовать FILE *). Вы должны хранить эти значения в массиве, а я пока не вижу массива.   -  person Jonathan Leffler    schedule 20.09.2013


Ответы (1)


Попробуй это. Обратите внимание на номер & on и проверку inputFile на нуль. Командная строка должна быть "./tsort file.txt"

int main( int argc, char *argv[] ) {
     FILE *inputFile;
     int number;

     if(argc != 2) {
         printf("Usage: %s filename\n", argv[0]);
         return 1;
     }
     inputFile = fopen(argv[1], "r" );

    if(inputFile == 0) {
        printf("Can't open '%s'\n", argv[1]);
        return 1;
    }

    while(fscanf(inputFile, "%i", &number)==1)
    {
            printf("%i\n", number);
    }

    return 0;

   }
person Charlie Burns    schedule 20.09.2013