C++ - 退出程序

3
在《C++ Without Fear: A Beginner's Guide That Makes You Feel Smart》一书的第8章中,有一段代码试图显示一个文本文件,具体代码如下:
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
你修改后的带有 std::cin >> c 的代码是什么样子? - Nim
5
现在你感觉多聪明?(抱歉,我忍不住了) - Cody Gray
4个回答

3

因为 input_line 是字符串(由 char 数组组成),所以 input_line[0] 得到第一个字母 - 这是在用户输入“quit”或“Quit”而不仅仅是“Q”的情况下。

std::cin >> c; 如果您只输入一个字符并按 Enter,则是正确的。


为什么程序在“c”是“int”类型时能够工作?难道语句“input_line[0]”不返回一个“char”吗?! - Simplicity
@SWEngineer:默认推广。您始终可以将整数值(和char计数)分配给较大的整数类型变量。通常最好将c设置为char - David Thornley
@SWEngineer - char 可以被视为 int。因此,将一个 int 值 (c) 与 'Q''q' 进行比较时,实际上是将 c 的值与 'q''Q' 的 ACSII 码进行比较。另外,c=input_line[0]; 只是将第一个元素的 ASCII 赋值给了 c。正如 David 所说,你应该将 c 声明为 char,因为 int 是更大的类型(例如,4B,而 char 总是 1B)。 - Kiril Kirov

3

我尝试过std::cin>>c;,但似乎不正确。

如果c是一个char,那么这是正确的。

你说得对;为了提取单个字符而读取整行是很奇怪的。我建议阅读此列表中的一本书来学习。


实际上,该书将“c”赋予了“int”类型! - Simplicity
@SW工程师 "我推荐这个列表中的一本书。" - Lightness Races in Orbit

1
你正在从已写入输入行的“数组”中获取第一个字符。

-4

非标准解决方案,但适用于Windows平台。

您可以使用在conio.h中定义的getch()函数。 例如:

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

再见


4
因为conio.h是非标准的C头文件,而这个问题是关于标准C++的问题,所以被投了反对票。 - James Greenhalgh
我认为你没有理解重点。这个问题不是关于这个头文件是否非标准,而是关于它是C头文件,而问题是关于C++的。它们不是同一种语言。 - Cody Gray

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接