Считывание строки с клавиатуры посимвольно и последующий вывод - 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. Подключение необходимых библиотек для работы с файлами и вводом-выводом.
  2. Установка локали на русскую.
  3. Выделение памяти под строку, длина которой равна 1 символу.
  4. Ввод строки посимвольно с помощью функции getchar(). Пробел не учитывается вводом, так как он является разделителем.
  5. Увеличение длины строки при каждом новом символе, выделение под него памяти с помощью функции realloc().
  6. Запись каждого нового символа в строку.
  7. Вывод строки после ввода.
  8. Блокировка программы до нажатия любой клавиши.
  9. Возвращение 0, что означает успешный конец работы программы.

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


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

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

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