Считывание строки с клавиатуры посимвольно и последующий вывод - C (СИ)
Формулировка задачи:
Необходимо считать строку посимвольно, до тех пор пока не будет введен пробел. Проблема в том, что когда вывожу массив символов, который хранит строку выводятся символы "Н" в количестве на единицу больше, чем было введено в массив. Что в моем коде не так? В Си я совсем начинающий.
#include <stdio.h> #include <stdlib.h> #include <locale.h> void main() { unsigned short int n = 0; //длина строки char *str; //строка char s; //текущий символ unsigned short int i; setlocale(LC_ALL, "RUS"); puts("Введите строку посимвольно. Пробел - конец ввода."); do { s = getchar(); if (s != 32) { n++; str = (char*)malloc(sizeof(char)*n); *(str+n-1) = s; } } while (s != 32); for (i = 0; i < n; i++) { putchar(*(str + i)); } getchar(); getchar(); }
Решение задачи: «Считывание строки с клавиатуры посимвольно и последующий вывод»
textual
Листинг программы
#include <stdio.h> #include <stdlib.h> #include <locale.h> int main() { unsigned short int n = 0; //длина строки char *str; //строка char s; //текущий символ setlocale(LC_ALL, "RUS"); str=(char*)malloc(sizeof(char)); puts("Введите строку посимвольно. Пробел - конец ввода."); do { s = (char)getchar(); if (s != 32) { n++; str=(char*)realloc(str,sizeof(char)*n); *(str+n-1) = s; } } while (s != ' '); str[n]=0; puts(str); system("pause"); return 0; }
Объяснение кода листинга программы
- Подключение необходимых библиотек для работы с файлами и вводом-выводом.
- Установка локали на русскую.
- Выделение памяти под строку, длина которой равна 1 символу.
- Ввод строки посимвольно с помощью функции getchar(). Пробел не учитывается вводом, так как он является разделителем.
- Увеличение длины строки при каждом новом символе, выделение под него памяти с помощью функции realloc().
- Запись каждого нового символа в строку.
- Вывод строки после ввода.
- Блокировка программы до нажатия любой клавиши.
- Возвращение 0, что означает успешный конец работы программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д