Добрый день, уважаемые участники форума!
Недавно с ужасом обнаружил факт, размещенный в заголовке темы и прошу у вас помощи в ликвидации столь досадного недоразумения.
Задача: выравнивание текста по ширине, с введением этой самой ширины и текста пользователем.
Решение(Начало): посимвольное чтение этого текста с помощью getchar(), использование динамического массива. Куча недоработок с "динамичностью", но пока нет нормального ввода(соль в том, что надо обойтись без gets())!Код с комментариями:
#include <stdio.h>
#define TRUE 1
#define START_SIZE 10 /* по замыслу начальный размер динамического массива, так мало
что бы потом удобнее было наблюдать за realloc()*/
char* JustifyText(char const *str, int width); //прототип функции, которой пока нет
int main(void)
{
int width;
char *st_ptr = malloc(START_SIZE * sizeof(char)); //начальный адрес
char *cur_ptr = st_ptr; //указатель с которым идет работа
printf("Task E-11: Text alignment. Please, input width: \n");
while(TRUE) /////////////////////////////////////////////////
{
printf("Width: ");
do{
scanf("%i", &width); //вводим ширину
if(width<=0)
printf("Incorrect value for width, try again\n");
}while(width<=0);
//getchar(); // попытка нейтрализовать ошибку, о которой пойдет речь
printf("Now, please, input text for alignment\n");
while(TRUE)
{
*st_ptr = getchar();
if(*st_ptr='\n') //как только нажимается Enter - конец ввода
/*Здесь основная проблема - когда мы пишем ширину (ранее) мы жмем Enter*/
break;
++st_ptr;
}
}//////////////////////////////////////////////////////////////
return 0;
}
Вот, в общем можно было бы реально начать писать работу с динамическим массивом и саму функцию, но без ввода как-то досадно.