Перенаправление стандартного ввода-вывода (XCODE) - C (СИ)

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

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

Здравствуйте, товарищи, дамы и господа. Изучаю сейчас С по одной очень занимательной книжуле: "Изучаем программирование на Си" (Head First). Всё было прекрасно до того момента, как я столкнулся с одним пустяковым задаием. Трудности у меня возникли с компилятором(я работаю в XCODE а автор в GCC). Короче говоря, есть у нас вот такой код
#include <stdio.h>
 
int main()
{
    
    float latitude;
    float longtitude;
    char info[80];
    int started = 0;
    
    puts("data=[");
    while (scanf("%f,%f,%79[^\n]", &latitude, &longtitude, info)==3) {
        if (started)
            printf(",\n");
        else
            started = 1;
        printf("{latitude: %f, longtitude: %f, info: '%s'}", latitude, longtitude, info);
    }
    puts("\n]");
    return 0;
}
Суть в том, что мы задаём с клавиатуры определённую широту, долготу и скорость и выдаёт прога нечто вроде этого {latitude: 56.099998, longtitude: 76.900002, info: '87'} Задача в том, чтобы данные вводились из файла gpsdata.csv, затем из обрабатывала наша программа и выводила результат в файл output.json Автор книги делает это так (с помощью операторов < и > и компилятора GCC) Как мне провернуть подобное с помощью XCODE? Спасайте!

Решение задачи: «Перенаправление стандартного ввода-вывода (XCODE)»

textual
Листинг программы
#include <stdio.h>      // puts, fopen, fclose, fgetc, fputc
#include <ctype.h>     // toupper
 
void processing(FILE* in, FILE* out)
{
    int c;
    while( (c = fgetc(in)) != EOF ) {
        fputc(toupper(c), out);
    }
}
 
int main(int argc, char* argv[])
{
    if( argc != 3 ) {
        puts("Usage: geo2json input.csv output.json\n");
        return 1;
    }
 
    FILE* in = fopen(argv[1], "r");
    if( in ) {
        FILE* out = fopen(argv[2], "w");
        if( out ) {
            processing(in, out);
            fclose(out);
        } else {
            puts("Error opening output file!");
        }
        fclose(in);
    } else {
        puts("Error opening input file!");
    }
    
    return 0;
}

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

  1. Включаются необходимые заголовочные файлы:
    • stdio.h для работы со стандартным вводом-выводом (функции puts, fopen, fclose, fgetc, fputc)
    • ctype.h для использования функции toupper
  2. Определяется функция processing, которая принимает два аргумента типа FILE*: in (входной поток) и out (выходной поток). Внутри функции используется цикл while, который выполняется до тех пор, пока не достигнут конец файла (EOF).
    • В каждой итерации цикла считывается символ из входного потока с помощью функции fgetc
    • Этот символ преобразуется в верхний регистр с помощью функции toupper
    • Преобразованный символ записывается в выходной поток с помощью функции fputc
  3. В функции main проверяется корректность аргументов командной строки. Если аргументов меньше или больше трех, выводится сообщение об ошибке и возвращается код завершения 1.
    • Если все в порядке, открывается входной файл с помощью функции fopen и проверяется его открытие. Если файл не может быть открыт, выводится сообщение об ошибке и возвращается код завершения 1.
    • Если входной файл успешно открыт, открывается выходной файл с помощью функции fopen и проверяется его открытие. Если файл не может быть открыт, выводится сообщение об ошибке и возвращается код завершения 1.
    • Если оба файла успешно открыты, вызывается функция processing с передачей в нее указателей на входной и выходной потоки
    • После завершения функции processing закрывается выходной поток с помощью функции fclose
    • Если при открытии выходного файла произошла ошибка, закрывается входной поток с помощью функции fclose
    • Если все файлы были успешно закрыты, возвращается код завершения 0
  4. Код завершения программы (возвращаемое значение функции main) выводится на экран с помощью функции puts

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


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

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

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