Вывести слова в кавычках - C (СИ)
Формулировка задачи:
Здравствуйте, как вывести слова в кавычках на С?
у меня, почему-то, этот код не работает:
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <string.h> int main(void) { char str[80], k[2]; k[0] = """; char *Ptr; int n= 0; puts("Vvedit slova: "); gets(str); while ((Ptr = strtok(NULL, ",")) != NULL) { if (Ptr[0] == k[0]) n++; } printf( "Sliv s kavuchami: %i ", n); return 0; }
Решение задачи: «Вывести слова в кавычках»
textual
Листинг программы
#include <stdio.h> #define DETECT 0 #define FILL 1 void out_words_quote(FILE* _out, FILE* _in, int q){ char s[128]; int c, i = 0, m = 0; while(((c = fgetc(_in)) != EOF) && !ferror(_in)){ if((c == '\n') || (c == '\r')) break; if(m == DETECT){ if(c == q){ m = FILL; i = 0; } } else if(m == FILL){ if(c == q){ m = DETECT; s[i] = '\0'; fprintf(_out, "%s\n", s); } else if(i < 127) s[i++] = (char)c; } } } int main(void){ out_words_quote(stdout, stdin, '"'); return 0; }
Объяснение кода листинга программы
В этом коде выполняется задача по выводу слов в кавычках.
- В первой строке подключается стандартная библиотека для работы с файлами и вывода данных.
- Далее, с помощью препроцессорных директив #define, определяются две константы: DETECT и FILL, которые будут использоваться в коде для определения режимов работы программы.
- Создается функция out_words_quote, которая принимает три аргумента: файловый дескриптор для вывода данных, файловый дескриптор для чтения данных и флаг, определяющий, должны ли слова быть выведены в кавычках.
- Внутри функции создается массив s, который будет использоваться для хранения строки, а также две переменные c, i и m, которые используются для контроля за процессом чтения и записи данных.
- В цикле while считываются данные из файла, при условии, что файл не пуст и нет ошибок при чтении.
- Внутри цикла проверяется, является ли текущий символ символом новой строки или символом возврата каретки. Если это так, то цикл прерывается.
- Далее, проверяется, находится ли переменная m в режиме DETECT. Если это так, то проверяется, равен ли текущий символ символу кавычки. Если это так, то переменная m переводится в режим FILL, переменная i сбрасывается в ноль и текущая строка выводится на экран.
- Если переменная m находится в режиме FILL, то проверяется, равен ли текущий символ символу кавычки. Если это так, то переменная m переводится в режим DETECT, текущий символ добавляется в строку s и переменная i увеличивается на единицу.
- Если текущий символ не является символом кавычки, то он добавляется в строку s, а переменная i увеличивается на единицу.
- В конце функции, после завершения цикла, возвращается ноль, что означает успешное выполнение функции.
- В функции main вызывается функция out_words_quote, передавая ей в качестве аргументов файловый дескриптор stdout (для вывода данных на экран), файловый дескриптор stdin (для чтения данных с экрана) и символ '`' (для вывода слов в кавычках).
- В конце функции main возвращается ноль, что означает успешное выполнение программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д