Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.10.2013, 00:09   #1
Nullerset
Пользователь
 
Регистрация: 01.02.2013
Сообщений: 27
По умолчанию Проблема с cin.getline();

Всем привет, возникла ужасная (!) проблема с cin.getline();

Код:

Код:
#include <winsock2.h>
#include <stdio.h>
#include <cstdlib>
#include <iostream>

using namespace std;

int main(void)
{
    WORD v=MAKEWORD(2,0);
    WSADATA d;
    int e=WSAStartup(v,&d);
    if (e)
    {
        perror("error initializing winsock");
        return 1;
    }
    struct sockaddr_in peer;
    int s;
    int rc;
    bool fl;
    fl = true;
    char buf[1024], IP[14], tmp[1024], text[1024], NickName[1024];
    cout << "IP: ";
    cin.getline(IP, sizeof(IP));
    cout << "Nickname: ";
    cin >> NickName;
    peer.sin_family=AF_INET;
    peer.sin_port=htons(1234);
    peer.sin_addr.s_addr=inet_addr(IP);
    s=socket(AF_INET,SOCK_STREAM,0);
    if (s<0)
    {
        perror("error calling socket");
        return 1;
    }
    rc=connect(s,(struct sockaddr *)&peer,sizeof(peer));
    if (rc)
    {
        perror("error calling connect");
        return 1;
    }
    printf("Connecting...\n");
    Sleep(2000);
    printf("Connected...\n");
        while (1==1)
    {
    if (fl!=true)
    {
      cout << NickName << ": ";
      cin.getline(tmp, sizeof(tmp));
    } else 
      {
        fl = false;
        printf("Waiting for response...");
        strcat(tmp, "Request for auth...");
      }
    cout << "\n";
    strcat(text, NickName);
    strcat(text, ": ");
    strcat(text, tmp);
    rc=send(s,text, sizeof(buf),0);
    strcpy(text, "");
    if (rc<=0)
    {
        perror("error calling send");
        return 1;
    }
    rc=recv(s,buf, sizeof(buf),0);
    if (recv<=0)
        perror("error calling recv");
    else
        cout << buf << endl;
    }
    WSACleanup();
    system("PAUSE >nul");
    return 0;
}
Проблема со строкой 52

Код:
cin.getline(tmp, sizeof(tmp));
В первую итерацию цикла он намеренно пропускает эту строку.

Во вторую итерацию цикла должен происходить ввод данных с клавиатуры, а он просто пропускает cin.getline переходя сразу же к отправки сообщения.

Однако в третью итерацию цикла все нормально. В чем может быть этот противный баг? Осталась надежда только на вас.
Nullerset вне форума Ответить с цитированием
Старый 21.10.2013, 00:29   #2
Nullerset
Пользователь
 
Регистрация: 01.02.2013
Сообщений: 27
По умолчанию

Решил сам, перед cin.getline надо ставить cin.ignore();
Nullerset вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
string, cin.getline() не понимаю... Arantir# Помощь студентам 4 01.12.2012 16:01
cin.getline и gets() iceman2112 Общие вопросы C/C++ 3 14.11.2012 14:33
cin.getline Intess Общие вопросы C/C++ 1 20.03.2012 15:22
C++ cin.getline. Исправьте ошибку Jane-sad Помощь студентам 0 18.02.2011 15:46
Проблема с функцией cin.getline. Подскажите советом. (*_*) Общие вопросы C/C++ 3 04.03.2009 22:43