【问题标题】:C++ - Quitting a programC++ - 退出程序
【发布时间】:2023-03-09 06:54:01
【问题描述】:

在第 (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&gt;&gt;c;,但似乎不正确。

有什么想法吗?

谢谢。

【问题讨论】:

  • std::cin &gt;&gt; c 修改的代码是什么样的?
  • 你现在觉得自己有多聪明? (对不起,我无法抗拒)

标签: c++ cin


【解决方案1】:

因为input_line 是字符串(来自chars 的数组),所以input_line[0] 获取第一个字母 - 这是为了以防用户写“退出”或“退出”,而不仅仅是“Q”

std::cin &gt;&gt; c; 是正确的,如果您只输入一个char 并按Enter

【讨论】:

  • 为什么程序在“c”是“int”类型时工作?语句“input_line[0]”不是返回一个“char”吗?!
  • @SWEngineer:默认促销。您始终可以获取一个整数值(和char 计数)并将其分配给更大整数类型的变量。一般来说,将c 改为char 会更好。
  • @SWEngineer - char 可以被视为int。因此,将 int 值 (c) 与 'Q''q' 进行比较,实际上是将 c 的值与 'q''Q' 的 ACSII 代码进行比较。此外,c=input_line[0]; 刚刚在c 上分配了第一个元素的 ASCII。正如大卫所说,您应该将c 声明为char,因为int 是更大的类型(例如,4B,而 char 始终是 1B)
【解决方案2】:

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

没错,如果 cchar

你是对的;仅仅为了提取一个字符而读取整行是很奇怪的。我推荐一本来自this list的书。

【讨论】:

  • 其实这本书给“c”的类型是“int”!
  • @SWEngineer “我推荐这本书中的一本书。”
【解决方案3】:

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

【讨论】:

    【解决方案4】:

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

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

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

    再见

    【讨论】:

    • 投反对票,因为 conio.h 是非标准 C 头文件,这是关于标准 C++ 的问题
    • 我认为你没有抓住重点。与其说这个头文件是非标准的,不如说它是 C 头文件,问题是关于 C++。它们不是同一种语言。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-20
    • 1970-01-01
    • 1970-01-01
    • 2021-02-08
    • 2013-02-15
    • 1970-01-01
    相关资源
    最近更新 更多