2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему
 
 Я не понимаю getchar()!
Сообщение05.12.2013, 15:13 


20/10/12
235
Добрый день, уважаемые участники форума!
Недавно с ужасом обнаружил факт, размещенный в заголовке темы и прошу у вас помощи в ликвидации столь досадного недоразумения.

Задача: выравнивание текста по ширине, с введением этой самой ширины и текста пользователем.
Решение(Начало): посимвольное чтение этого текста с помощью getchar(), использование динамического массива. Куча недоработок с "динамичностью", но пока нет нормального ввода(соль в том, что надо обойтись без gets())!Код с комментариями:
код: [ скачать ] [ спрятать ]
Используется синтаксис C++
#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;
}

Вот, в общем можно было бы реально начать писать работу с динамическим массивом и саму функцию, но без ввода как-то досадно.

 Профиль  
                  
 
 Re: Я не понимаю getchar()!
Сообщение05.12.2013, 17:33 
Заслуженный участник


04/05/09
4589
Ваша проблема в том, что вы смешиваете форматированный ввод (scanf) и неформатированный. Проходится вдаваться в детали работы scanf.
А именно, после завершения scanf указатель ввода останавливается на следующем символе, не соответствующем формату данных. Это может быть перевод строки, буква, запятая, и даже пробел, а также много других вариантов.
Соответственно, если надо ввести целиком следующую строчку, то сначала придётся полностью пропустить остаток текущей, т.е. все символы до перевода строки.

-- Чт дек 05, 2013 09:35:04 --

Кстати, можно опустить sizeof(char), так как он строго равен единице по определению оператора sizeof.
Ну и проверок ошибок не хватает, особенно при вводе.

 Профиль  
                  
 
 Re: Я не понимаю getchar()!
Сообщение06.12.2013, 08:25 


20/10/12
235
venco, понял, будем разбираться.

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 3 ] 

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group