2011-01-20 5 views
3

В C++ без страха: Руководство для начинающих, который заставляет вас чувствовать себя умным книгу в главе (8), часть кода пытается отобразить текстовый файл выглядит следующим образом:C++ - Бросить программу

while(1) 
{ 
    for(int i=1; i <= 24 && !file_in.eof(); i++) 
    { 
     file_in.getline(input_line,80); 
     std::cout<<input_line<<std::endl; 
    } 

    if(file_in.eof()) 
    { 
     break; 
    } 

    std::cout<<"More? (Press 'Q' and ENTER to quit.)"; 
    std::cin.getline(input_line,80); 
    c=input_line[0]; // <<<<<< 
    if(c=='Q'||c=='q') 
    { 
     break; 
    } 
} 

часть я не получаю здесь:

c=input_line[0]; 

Я думаю, что это кладется читать «Q» или «Q». Но зачем использовать эту форму (массив)? И, нет ли способа прочитать «Q» или «q» напрямую?

Я пробовал std::cin>>c;, но казалось неправильным.

Любые идеи?

Спасибо.

+1

Повреждено ключ "закладка"? –

+1

Как выглядит ваш модифицированный код с 'std :: cin >> c'? – Nim

+5

Насколько вы умны сейчас? (извините, я не удержался) –

ответ

3

Поскольку input_line является строка (массив из char с), так input_line[0] получает первое письмо - это в том случае, что пользователь записи «бросить» или «Выход», а не только «Q»

std::cin >> c; бы правильным, если вы вводите только один char и нажмите Enter

+0

Почему программа работает, а «c» имеет тип «int»? Разве утверждение «input_line [0]» не возвращает символ? – Simplicity

+0

@SWEngineer: поощрение по умолчанию. Вы всегда можете взять интегральное значение (и 'char' counts) и назначить его переменной большего интегрального типа. Было бы лучше вообще сделать 'c' a' char'. –

+0

@SWEngineer - 'char' можно рассматривать как' int'. Итак, сравнивая значение int ('c') с' 'Q'' или' 'q'', вы фактически сравниваете значение' c' с кодом ACSII '' q'' или '' Q''. Кроме того, 'c = input_line [0];' просто назначил ASCII первого элемента на 'c'. Как сказал Дэвид, вы должны объявить 'c' как' char', потому что 'int' является более крупным (4B, например, в то время как char всегда 1B) –

3

Я попытался std::cin>>c;, но казалось неправильным.

Это верно, если c является char.

Вы правы; чтение всей строки только для извлечения одного символа является странным. Я рекомендую книгу от this list.

+0

На самом деле книга дает« c »тип« int »! – Simplicity

+0

@SWEngineer «Я рекомендую книгу из этого списка». –

1

Вы получаете первый символ из «массива», в который была записана строка ввода.

-4

NON-STANDARD решение, но работает на платформах для окон.

вы можете использовать функцию Геч(), определенный в conio.h Например:

#include <conio.h> 
... 
char c = getch(); 

свиданья

+4

Вниз, потому что conio.h является нестандартным заголовком C, и это вопрос о стандарте C++ –

+0

. Я думаю, вы пропустили точку. Менее этот заголовок нестандартен, чем о том, что он является заголовком C, а вопрос о C++. Это не тот же язык. –

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

  • Нет связанных вопросов^_^