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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> gets не записывает сроку из функции, не понятная проблема 
V
    Опции темы
Nightxxx88
Дата 10.6.2010, 23:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Код

#include "stdafx.h"
#include <iostream>
using namespace std;

void menu();
void vvod();

int main()
{    
    menu(); 
            
    getchar();
    return 0;
}

void menu()
{
    int choice;

    do
    {
    system ("cls"); 
        
           cout << "\n\n\t\t|*******************MENU*****************|";
           cout << "\n\n\t\t|Vvod tekstovoi stroki    ------  PRESS 1|"; 
       cout << "\n\n\t\t|Vixod iz programmi       ------  PRESS 5|";
           cout << "\n\n\t\t|----------------------------------------|";
           cout << "\n\n\n\t\t\t\tVash vibor  \n\t\t\t\t";
           cin >> choice;    
    
    switch(choice)                       
    {
    case 1: vvod();  break;

    case 5: break;  
    default: cout<<"\aNepravilnij vibor!!! "; break;        
    }        
        
    }while(choice !=5);
}

void vvod()
{           
    char buffer[256];        

    printf("\nVvedite tekstovyu stroky i najmite Enter: "); 
    gets(buffer);            //Vot tyt ne zapisivaet
    printf("Stroka - %s \n",buffer);              
    
    getchar();
}


Добавлено через 2 минуты и 4 секунды
Если в main() использовать gets() то записывает хорошо , а вот из своей функции не хочет почему-то.
Подскажите что не так
PM MAIL   Вверх
toxx
Дата 11.6.2010, 00:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Код

void vvod()
{           
    char buffer[256];        
    printf("\nVvedite tekstovyu stroky i najmite Enter: "); 

    fflush(stdin);

    gets(buffer);            //Vot tyt ne zapisivaet
    printf("Stroka - %s \n",buffer);              
    
    getchar();
}


Это сообщение отредактировал(а) toxx - 11.6.2010, 00:41
PM MAIL   Вверх
Nightxxx88
  Дата 11.6.2010, 04:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Спасибо

Добавлено через 5 минут и 52 секунды
А почему вот еще на gets() выдается предупреждение вида  
warning C4996: 'gets' was declared deprecated    
 smile 
PM MAIL   Вверх
bsa
Дата 11.6.2010, 10:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Nightxxx88, http://www.opennet.ru/cgi-bin/opennet/man.cgi?topic=gets (в самом низу)
PM   Вверх
Nightxxx88
Дата 11.6.2010, 12:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



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


Эксперт
****


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

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




M
bsa
если ответ на вопрос получен, то пометь тему решенной

PM   Вверх
susanin
Дата 11.6.2010, 12:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



извиняюсь за офтоп сразу. просто все равно немного непонятна работа оператора gets().
я так понимаю он работает в данном случае следующим образом:
1)мы записываем во входной поток наш выбор (choice) и символ \n.
2)затем число выбора присваивается переменной choice а в потоке остается символ \n
3)затем когда вызывается gets(buffer); в буффер записывается только символ \n и поэтому при вызове printf("Stroka - %s \n",buffer) на экран выводится только \n
НО! тогда непонятно, почему если заменить код допустим на такой
Код

switch(getchar())                       
    {
    case '1': vvod();  break;

    case '5': break;  
    default: cout<<"\aNepravilnij vibor!!! "; break;        
    }        
        
    }while(getchar() !=5);

во входном потоке остается все равно только символ \n. почем в потоке не остается и символ нашего выбора?
PM MAIL   Вверх
bsa
Дата 11.6.2010, 13:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(man gets)
gets()  reads  a  line from stdin into the buffer pointed to by s until either a terminating newline or EOF, which it replaces with '\0'.
Документация - твой друг.
PM   Вверх
Nightxxx88
Дата 11.6.2010, 14:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



всем спасибо
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


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

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


 




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


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

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