Перенаправление стандартного ввода-вывода (XCODE) - C (СИ)
Формулировка задачи:
Здравствуйте, товарищи, дамы и господа. Изучаю сейчас С по одной очень занимательной книжуле: "Изучаем программирование на Си" (Head First). Всё было прекрасно до того момента, как я столкнулся с одним пустяковым задаием. Трудности у меня возникли с компилятором(я работаю в XCODE а автор в GCC).
Короче говоря, есть у нас вот такой код
Суть в том, что мы задаём с клавиатуры определённую широту, долготу и скорость и выдаёт прога нечто вроде этого {latitude: 56.099998, longtitude: 76.900002, info: '87'}
Задача в том, чтобы данные вводились из файла gpsdata.csv, затем из обрабатывала наша программа и выводила результат в файл output.json
Автор книги делает это так (с помощью операторов < и > и компилятора GCC)
Как мне провернуть подобное с помощью XCODE? Спасайте!
#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; }
Решение задачи: «Перенаправление стандартного ввода-вывода (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; }
Объяснение кода листинга программы
- Включаются необходимые заголовочные файлы:
stdio.h
для работы со стандартным вводом-выводом (функцииputs
,fopen
,fclose
,fgetc
,fputc
)ctype.h
для использования функцииtoupper
- Определяется функция
processing
, которая принимает два аргумента типаFILE*
:in
(входной поток) иout
(выходной поток). Внутри функции используется циклwhile
, который выполняется до тех пор, пока не достигнут конец файла (EOF
).- В каждой итерации цикла считывается символ из входного потока с помощью функции
fgetc
- Этот символ преобразуется в верхний регистр с помощью функции
toupper
- Преобразованный символ записывается в выходной поток с помощью функции
fputc
- В каждой итерации цикла считывается символ из входного потока с помощью функции
- В функции
main
проверяется корректность аргументов командной строки. Если аргументов меньше или больше трех, выводится сообщение об ошибке и возвращается код завершения 1.- Если все в порядке, открывается входной файл с помощью функции
fopen
и проверяется его открытие. Если файл не может быть открыт, выводится сообщение об ошибке и возвращается код завершения 1. - Если входной файл успешно открыт, открывается выходной файл с помощью функции
fopen
и проверяется его открытие. Если файл не может быть открыт, выводится сообщение об ошибке и возвращается код завершения 1. - Если оба файла успешно открыты, вызывается функция
processing
с передачей в нее указателей на входной и выходной потоки - После завершения функции
processing
закрывается выходной поток с помощью функцииfclose
- Если при открытии выходного файла произошла ошибка, закрывается входной поток с помощью функции
fclose
- Если все файлы были успешно закрыты, возвращается код завершения 0
- Если все в порядке, открывается входной файл с помощью функции
- Код завершения программы (возвращаемое значение функции
main
) выводится на экран с помощью функцииputs
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д