Вводить и выводить строку пока не будет нажат Enter - C (СИ)
Формулировка задачи:
здраствуйте
прога написана на С
прога должна вводить и выводить строку пока не нажмется ентер
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include <conio.h>
#include <string.h>
int main()
{
char *a,*b,x;
int i=0,j,n;
printf("put str:\n");
x=getch();
printf("%c",x);
a=(char *)malloc(1*sizeof(char));
a[0]=x;
b=(char *)malloc(1*sizeof(char));
b[0]=a[0];
while(x!=13)
{x=getch();
printf("%c",x);
i++;
realloc(a,i);
for(j=0;j<i-1;j++)
{a[j]=b[j];
}
a[i]=x;
realloc(b,i);
for(j=0;j<i;j++)
{
b[j]=a[j];
}
}
printf("\n\n\n\n\n");
for(j=0;j<i;j++)
printf("%c",a[j]);
free(a);
free(b);
printf("\n");
system("pause");
return 0;
}Решение задачи: «Вводить и выводить строку пока не будет нажат Enter»
textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include <conio.h>
#define ENTER 13
int main()
{
char *a,x;
int nCell=0;
printf("put str:\n");
a=(char *)malloc(sizeof(char));
if (a==NULL)
{
printf("Memory error");
system("pause");
return 1;
}
while((x=getch())!=ENTER)
{
printf("%c",x);
realloc(a,(nCell+1)*sizeof(char));
a[nCell]=x;
++nCell;
}
printf("\n");
for(int i=0; i<nCell; i++ )
printf("%c",a[i]);
printf("\n\n\n\n\n");
free(a);
system("pause");
return 0;
}
Объяснение кода листинга программы
- Подключение необходимых библиотек для работы с консолью и памятью.
- Определение значения ENTER, которое будет использоваться для проверки нажатия клавиши Enter.
- Объявление переменных: a - указатель на строку, x - символ, nCell - количество заполненных ячеек в строке.
- Вывод сообщения с просьбой ввести строку.
- Выделение памяти под строку, размером в 1 символ.
- Проверка на отсутствие ошибки при выделении памяти. При наличии ошибки выводится сообщение об ошибке и программа завершается.
- Ввод символов в строку до тех пор, пока не будет нажат Enter.
- При каждом вводе символа, строка realloc-ируется, чтобы увеличить её размер на 1 символ.
- Введенный символ сохраняется в массиве.
- Увеличивается счётчик заполненных ячеек.
- После ввода всех символов, выводится введённая строка.
- Выделяемая память освобождается.
- Программа ожидает нажатия любой клавиши перед завершением работы.
- Возвращается 0, что означает успешное завершение работы программы.