rajducky Ответов: 2

Почему первая функция gets () не работает в этом коде?


Я пробовал этот код (в нескольких программах) с помощью dev c++ и code:: Blocks, но первая команда gets() никогда не будет выполнена, если за ней последует cin>>


#include<iostream>
#include<stdio.h>
using namespace std;
int main()
{
    int i;
    char c[10], d[10];
    cout<<"Enter int ";
    cin>>i;
    cout<<"Enter string ";
    gets(c); // this is where things act all possessed
    cout<<"Enter 2nd string ";
    gets(d);
    cout<<i<<endl<<c<<endl<<d;
    return 0;
}


Пожалуйста, помогите мне

Что я уже пробовал:

Я попробовал взять переменную i в качестве символа, а затем взять входные данные, используя только gets () ' s, который работает безупречно
но тогда мне строго нужно принимать его как целое число в некоторых программах, чтобы иметь возможность делать такие вещи, как инкремент/декремент/что угодно

CPallini

Не смешивайте потоки C++ С C stdio, если вы действительно не знаете, что делаете, см., например:
http://www.drdobbs.com/the-standard-librarian-iostreams-and-std/184401305

2 Ответов

Рейтинг:
2

Richard MacCutchan

Это потому что cin считывает только то количество символов, которое необходимо для построения переменной i. После чего входной буфер все еще содержит другие символы или пробелы до конца входной строки, включая символ(ы) новой строки в конце. Итак, призыв к gets будет возвращать только эти данные, а не ждать большего ввода от пользователя. Вы должны использовать cin.getline чтобы использовать эти дополнительные символы, а также читать в полных строках, а не использовать gets.


CPallini

5.

Рейтинг:
0

CPallini

Что не так с C++ струны и потоки?

#include <iostream>
#include <string>
using namespace std;

int main()
{
    int i;
    string c,d;
    cout<<"Enter int ";
    cin>>i;
    cout<<"Enter string ";
    cin >> c;
    cout<<"Enter 2nd string ";
    cin >> d;
    cout<<i<<endl<<c<<endl<<d<<endl;
    return 0;
}