Считать 3 числа из файла, и записать в результирующий - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Имеются некоторые проблемы с чтением с/записью в файл. Допустим, есть программа, считающая НСД 3 чисел. Надо считать 3 числа из файла, и записать в файл НСД. Файлов два варианта - бинарный и текстовый. Вот код без файлового ввода-вывода.
#include <stdio.h>
    int nsd(int r,int w) {
       
        do {
     if (r>w) r=r%w;
     else w=w%r;
        }
         while (r!=0&&w!=0);
       
         return r+w;
    }
    int main()
    {    
        int a,b,c;
        printf ("Input a,b,c: \n");
        scanf ("%d%d%d", &a,&b,&c);
       printf("%d ",nsd(c,nsd(a,b)));
       return 0;
    }
Как я понял, запись примерно так смотрится например:
FILE *out;
out=fopen("D://file.txt", "w");
if (out!=0) fprintf (out, "%d%d%d", a,b,c);
Но не работает.
Вот это должно бы работать, но ....
FILE *ff;
        FILE *out;
        int a,b,c;
        out=fopen("D://fileout.txt","r");
        if (out!=NULL) fscanf(out,"%d%d%d",&a,&b,&c);
        fclose(out);
        nsd(c,nsd(a,b));
        ff=fopen("D://filein.txt","w");
        if (ff!=NULL) fprintf(ff, "%d ", nsd(c,nsd(a,b)));
        fclose(ff);

Решение задачи: «Считать 3 числа из файла, и записать в результирующий»

textual
Листинг программы
#include <stdio.h>
 
int nsd(int r, int w) {
    do {
        if (r > w)
            r = r % w;
        else
            w = w % r;
    } while (r != 0 && w != 0);
 
    return r + w;
}
int main() {
    int a=12, b=60, c=50;
    //printf("Input a,b,c: \n");
    //scanf("%d%d%d", &a, &b, &c);
    //printf("%d ", nsd(c, nsd(a, b)));
    FILE *ff;
    FILE *out;
    out = fopen("fileout.txt", "w");
    if (out!=NULL) fprintf(out, "%d %d %d", a, b, c);
    fclose(out);
    out = fopen("fileout.txt", "r");
    if (out != NULL)
        fscanf(out, "%d%d%d", &a, &b, &c);
    fclose(out);
    nsd(c, nsd(a, b));
    ff = fopen("filein.txt", "w");
    if (ff != NULL)
        fprintf(ff, "%d ", nsd(c, nsd(a, b)));
    fclose(ff);
    return 0;
}

Объяснение кода листинга программы

  1. Включаем стандартную библиотеку ввода-вывода
  2. Определяем функцию nsd, которая вычисляет наибольший общий делитель двух чисел
  3. В функции main создаем три переменные типа int: a=12, b=60, c=50
  4. Открываем файл для записи (fileout.txt) и записываем в него значения переменных a, b, c
  5. Открываем файл для чтения (fileout.txt) и считываем значения переменных a, b, c
  6. Вычисляем значение функции nsd с использованием переменных a, b, c
  7. Открываем файл для записи (filein.txt) и записываем в него значение функции nsd
  8. Закрываем все открытые файлы
  9. Возвращаем 0, чтобы указать, что программа успешно завершилась

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

10   голосов , оценка 3.9 из 5
Похожие ответы