c lang текстовый файл ввода сумма цифр в строках - PullRequest
0 голосов
/ 05 января 2019

// хорошо, спасибо за помощь. я отредактировал код, передал указатель, и теперь он печатает номер из конкретной строки, печатает номер этой строки и выводит сумму из всех последовательных чисел. Пока хорошо, но ... Далее я хочу назначить каждую из сумм массиву, чтобы я мог использовать цикл for, чтобы проверить, равна ли полученная сумма любым предыдущим суммам. я использую вкладку [n] == результат; К сожалению, после завершения цикла while все элементы массива пусты ... спасибо //

включает

включает

int main()
{
    int result =0;

    read_ints("numbers.txt", &result);


}



void read_ints (const char* file_name, int *result)
{

  FILE* file = fopen ("numbers.txt", "r");
  int i = 0;
  int n=1; //row number//
  int tab[n]; //array

  if (file == NULL)
  {
   printf("unable to open file %s", file_name);

  }
  fscanf (file, "%d", &i);
  while (!feof (file))
    {
      printf ("%d ", i);
      *result += i;
      tab[n]==result;
      printf("row number: %d \n", n);
      n++;

      printf("\n sum of this number and all numbers before is: %d\n", *result);

      fscanf (file, "%d", &i);

    }
          printf("\nnumber from row number one is ... : %d\n", tab[1]);
  fclose (file);



}

Ответы [ 3 ]

0 голосов
/ 05 января 2019

следующий предложенный код:

  1. правильно проверяет наличие ошибок
  2. правильно передает текст ошибки в stderr, включая текстовую причину, по которой система считает, что произошла ошибка.
  3. использует возвращаемое значение из fscanf() для управления циклом
  4. правильно содержит «прототип» для подфункции
  5. правильно использует void внутри паренов main() и прототип подфункции, которая не получает параметров.
  6. последовательно выравнивает код, для удобства чтения
  7. чисто компилирует
  8. документация, почему каждый заголовочный файл включен

А теперь предложенный код:

#include <stdio.h>   // FILE, perror(), fopen(), printf(), fclose()
#include <stdlib.h>  // exit(), EXIT_FAILURE



void read_ints ( void );


int main( void )
{
    read_ints();
}



void read_ints ()
{
    FILE* file = fopen ("liczby.txt", "r");
    if( !file )
    {
      perror( "fopen to read liczby.txt failed" );
      exit( EXIT_FAILURE );
    }


    int i = 0;
    int result = 0;
    while ( fscanf ( file, "%d", &i) == 1 )
    {
      printf ("%d ", i);
      result=result+i;
      printf("\n suma tej liczby ze wszystkimi poprzednimi wynosi: %d\n", result);
    }
    fclose (file);
}
0 голосов
/ 08 января 2019

// Хорошо, теперь код выглядит лучше, но, тем не менее, результирующие значения не сохраняются в массиве tab []. это связано с отсутствием указателя или неправильным объявлением массива (?).
Я хотел, чтобы это был динамический массив, так что мне не нужно объявлять конкретный размер массива .//

#include <stdio.h>
#include <stdlib.h>
void read_ints(const char* file_name, int *result);

int main()
{
    int result =0;
    read_ints("numbers.txt", &result);
}
void read_ints (const char* file_name, int *result)
{
  FILE* file = fopen ("numbers.txt", "r");
  int i = 0;
  int n=0; //row number//
  int m;
  int tab[m]; //array//
  if (file == NULL)
  {
   printf("unable to open file %s", file_name);
  }
  while ( fscanf (file, "%d", &i) ==1)
    {
       n++;
      printf ("%d\n ", i);
      *result += i;
      printf("\n we are at row nr. %d sum of this number and all numbers before is: %d\n", n, *result);
       tab[n]==*result;
    }
          printf("\nnumber from row number one is ... : %d\n", tab[1]); //this does not work properly //
  fclose (file);
}
0 голосов
/ 05 января 2019

Ваш код в основном правильный. Вы просто неправильно вызываете read_ints. Вы должны передать указатель на результат, если хотите получить возвращаемое значение.

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

void read_ints (const char* file_name, int *result) {
    FILE* file = fopen (file_name, "r");
    int i = 0;

    if (file == NULL) {
        printf("unable to open file %s\n", file_name);
        return;
    }

    fscanf (file, "%d", &i);
    while (!feof (file))
    {
        printf ("%d ", i);
        *result += i;
        printf("\n suma tej liczby ze wszystkimi poprzednimi wynosi: %d\n", *result);
        fscanf (file, "%d", &i);

    }
    fclose (file);
}

int main() {
    int result =0;

    read_ints("liczby.txt", &result);

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