лучшее понимание getline () и cin - PullRequest
0 голосов
/ 26 мая 2010

Попытка получить некоторое базовое понимание функций консоли. У меня проблемы, поэтому рассмотрим следующее ...

#include "stdafx.h"
#include<iostream>
#include<conio.h>

using namespace std;

/*
This is a template Project
*/

void MultiplicationTable(int x);

int main()
{

    int value = 0;

    printf("Please enter any number \n\n");
    getline(cin, value);

    MultiplicationTable(value);


    getchar();


    return 0;
}

Я на самом деле основал этот код от http://www.cplusplus.com/doc/tutorial/basic_io/. Моя IDE не распознает getline (), поэтому, конечно, когда я компилирую приложение. Я получаю ошибку

'getline': identifier not found

Теперь взгляните на этот код

#include "stdafx.h"
#include<iostream>
#include<conio.h>

using namespace std;

/*
This is a template Project
*/

void MultiplicationTable(int x);

int main()
{

    int value = 0;

    printf("Please enter any number \n\n");
    cin>>value;

    MultiplicationTable(value);


    getchar();


    return 0;
}

Когда я выполняю эту строку кода, окно консоли открывается и сразу же закрывается. Я думаю, что я что-то упустил из Cin. Я знаю, что он разделяет пробелы, но я не знаю, что еще. что я должен использовать для ввода, чтобы сделать мою жизнь проще.

Ответы [ 3 ]

3 голосов
/ 26 мая 2010

Функция getline читает строки, а не целые числа:

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

int main() {
    string line;
    getline( cin, line );
    cout << "You entered: " << line << endl;
}
3 голосов
/ 26 мая 2010

Функция getline() объявлена ​​в заголовке строки. Итак, вы должны добавить #include <string>. Он определен как istream& getline ( istream& is, string& str );, но вы вызываете его с int вместо строкового объекта.

О вашем втором вопросе:

Когда я выполняю эту строку кода, окно консоли открывается и сразу закрывается

Вероятно, из вашего ввода в потоке все еще остается символ '\n', когда ваша программа достигает функции getchar() (которую, я полагаю, вы поместили туда, чтобы ваше окно не закрывалось). Вы должны очистить свой поток. Простое исправление - вместо getchar() добавить строку

 int c;
 while((c = getchar()) != '\n'){} 

Это очистит ваш поток до следующего переноса строки.

Примечание: conio.h не является частью стандарта c ++ и устарело.

0 голосов
/ 10 октября 2013

Вы exiting the program, прежде чем сможете увидеть результаты, потому что (я предполагаю) вы double-clicked .exe file из представления Windows Explorer (или рабочего стола) для выполнения. Вместо этого зайдите в Пуск, Выполнить, введите cmd.exe и откройте окно командной строки. Перейдите туда, где находится ваша программа. Введите имя вашей программы в командной строке и выполните. Он останется открытым, пока вы intentionally не закроете командное окно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...