Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> считывание строки с пробелами 
:(
    Опции темы
pharrell
Дата 19.7.2006, 12:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 101
Регистрация: 27.6.2006

Репутация: нет
Всего: нет



Всем привет.Вот этой функцией я заполняю структуру,но нельзя ставить пробелы.Помогите сделать с побелами,без них нельзя,приходится ставить "_".Заранее Спасибо
void add()      
    {
        if ((fp=fopen("Grasses.db","a+t"))==NULL) 
        {
            perror ("Warning!");
            getch();
            exit (0);
        }
        number=i;
        printf ("The name of a plant:  ");
        scanf ("%s",book[number].name );     

        printf ("The latin name of a plant:  ");
        scanf ("%s",&book[number].namelat );

        printf ("Place of growth of a plant:  ");
        scanf ("%s",&book[number].place );

        printf ("Life expectancy of a plant:  ");
        scanf ("%s",&book[number].age );

        printf ("Economic purpose of a plant :  ");
        scanf ("%s",&book[number].application );

        fwrite (&book[number], sizeof(book[number]), 1, fp);  
        fclose(fp);
        printf ("The new plant is added in base.......... ");
        printf ("Press any key to continue\n");
        getch();
    }
 
PM MAIL   Вверх
_hunter
Дата 19.7.2006, 12:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 16
Всего: 98



так ты считываеш стоку или заполняеш структуру?
и в чем проблема с пробелом? 


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
pharrell
Дата 19.7.2006, 13:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 101
Регистрация: 27.6.2006

Репутация: нет
Всего: нет



ну я записываю в поле name-два слова разделенные пробелом,а записывается все это: первое слово в первое поле,второе-во второе.А мне надо чтобы записывались оба слова в первое поле.scanf же-не читает пробелов,и в этом проблема.Может надо использовать другую функцию? 
PM MAIL   Вверх
_hunter
Дата 19.7.2006, 13:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 16
Всего: 98



ну так fread' ом читай до enter' а (\r/\n) 


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
pharrell
Дата 19.7.2006, 13:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 101
Регистрация: 27.6.2006

Репутация: нет
Всего: нет



А как?Разве он не из файла читает?Я просто с клавиатуры ввожу два или больше слова и мне надо чтбы вся эта строка записалась в одно поле name,а затем также заполнить остальные. 
PM MAIL   Вверх
_hunter
Дата 19.7.2006, 14:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 16
Всего: 98



fread(stdin, ... 


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
0x07L
Дата 19.7.2006, 14:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 272
Регистрация: 10.6.2006
Где: Москва

Репутация: нет
Всего: 5



Есть еще функция "gets" из <stdio.h>. Для файлов, соответственно, fgets. Есть и UNICODE-версии. 

Это сообщение отредактировал(а) 0x07L - 19.7.2006, 14:38
PM MAIL   Вверх
pharrell
Дата 19.7.2006, 17:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 101
Регистрация: 27.6.2006

Репутация: нет
Всего: нет



а вот простенький вопрос:у меня есть структура struct grasses book[250] в ней 5 полей.Я создаю временную struct grasses tmp и мне надо полю tmp.place присвоить "луг".Но некк не получается smile подскажите пожалуйста как?? 
PM MAIL   Вверх
_hunter
Дата 19.7.2006, 18:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 16
Всего: 98



код показывай.
явно вместо memcpy простое присваивание на char' ах используеш... 


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
pharrell
Дата 19.7.2006, 18:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 101
Регистрация: 27.6.2006

Репутация: нет
Всего: нет



void find()
    {
        int zero;
        counter();
        k=0;
        zero=0;
        char a[]="луг";
        char b[]="лекарственное";
        struct grasses tmp;
        tmp.place                 ?????????????
                                tmp.application          ???????????????
        printf("<<the medicinal grasses growing on meadows>> ");
        for (i=0; i<=n; i++)
        {
            if (strcmp(tmp.place,book[i].place)==0)            
            {
                if (strcmp(tmp.application,book[i].application)==0)
                {
                    book[k]=book[i];
                }                               
            }
            else
            {
            goto end;                                        
            }
            k++;
end:;
        }
    n=k;
    printf ("Searching result: \n\n");
    if (k==0)
    {
        printf("Any plant is not found.....\n\n");
    }
    else
    {
        i=k;
        output();
    }
    printf ("Press any key to continue\n");
    getch();
    } 
PM MAIL   Вверх
_hunter
Дата 19.7.2006, 18:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 16
Всего: 98



strcpy(tmp.place, "123") 


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
pharrell
Дата 19.7.2006, 18:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 101
Регистрация: 27.6.2006

Репутация: нет
Всего: нет



Почему-то не работает,проверьте    


void find()
    {
        counter();
        k=0;
        struct grasses tmp;
        strcpy(tmp.application,"лекарственное");
        strcpy(tmp.place,"луг");
        printf("<<the medicinal grasses growing on meadows>>\n");
        for (i=0; i<=n; i++)
        {
            if (strcmp(tmp.place,book[i].place)==0)            
            {
                if (strcmp(tmp.application,book[i].application)==0)
                {
                    book[k]=book[i];
                }                               
            }
            else
            {
            goto end;                                        
            }
            k++;
end:;
        }
    n=k;
    printf ("Searching result: \n\n");
    if (k==0)
    {
        printf("Any plant is not found.....\n\n");
    }
    else
    {
        i=k;
        output();
    }
    printf ("Press any key to continue\n");
    getch();
    } 
PM MAIL   Вверх
_hunter
Дата 19.7.2006, 19:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 16
Всего: 98



и что не работает? строка скопировалась -- скопировалась. что еще нужно?
+ почему бы отладчиком не воспользоваться?.. 


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
pharrell
Дата 19.7.2006, 19:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 101
Регистрация: 27.6.2006

Репутация: нет
Всего: нет



Ну сравнивает и не выводит,а вот если прописать вместо копирования и ввести вручную
Код

scanf("%s",&tmp.place);
scanf("%s",tmp.application);

,то все работает. 
PM MAIL   Вверх
pharrell
Дата 19.7.2006, 20:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 101
Регистрация: 27.6.2006

Репутация: нет
Всего: нет



нет все нормально,только вот сравниваю я со словом из русских букв.Поэтому ничего не получается.Как быть???? smile  
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0588 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.