2010-05-26 7 views
0

Попытка получить базовое представление о функциях консоли. Я имею проблемы поэтому рассмотрим следующее ...лучшее понимание getline() и cin

#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; 
} 

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

+0

Ну, я думаю, причина в том, что первый код не работает, потому что getline ожидает (char * s, streamsize n), а cin - istream object, поэтому компилятор жаловался. Я не уверен, почему окно не остается открытым для второго кода. –

+0

Добавить скобки в конце void MultiplicationTable (int x) как так void MultiplicationTable (int x) {}; – Secko

ответ

3

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

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

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

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

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

Это сбросит ваш поток до следующего разрыва строки.

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

+0

спасибо. Я действительно смущен этим iostream. Я столкнулся с предыдущими проблемами, когда символы все еще находились в iostream, и поэтому приложение функционировало неправильно. Есть ли какие-либо ресурсы или что-либо, что вы можете сказать о том, как решать эти проблемы? – numerical25

3

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

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

int main() { 
    string line; 
    getline(cin, line); 
    cout << "You entered: " << line << endl; 
} 
+0

ОК спасибо. Но что такое cin-код. почему это вырезано для ?? – numerical25

+0

@numerical Вам придется перефразировать это. – 2010-05-26 17:14:08

+0

Второй код, который я использую, имеет функциональность cin. Если вы запустите этот код в своем компиляторе. Он выполняется, а затем немедленно заканчивается. Это не оставляет мне времени для ввода чего-либо или чего-либо в этом. – numerical25

0

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

Смежные вопросы