使用ASCII值作为条件

时间:2013-11-27 12:43:14

标签: c++ arrays ascii

以下程序应该从输入读取一些整数值并将它们存储到数组中,直到用户按下“Esc”键,但我无法弄清楚如何做到这一点。我曾尝试使用它的ASCII值作为条件,但它不起作用,或者我做错了什么。有人可以帮助我吗?这是代码:

    void main(){
int i=0, a[MAX];
cout <<"Please enter several integer numbers and press Esc when you want to finish" << endl;
while ((i != char(27)) && (i < MAX)) {
     cin >> a[i];
    i++;
}

2 个答案:

答案 0 :(得分:2)

这里有几个问题。第一个,也是最重要的, 大多数系统都会进行面向行的输入,这意味着 他们会拿起很多控制角色(包括 可能,ESC)并在内部做一些事情,而不是 而不是归还给你;甚至可能都不可能 在输入中看到一个ESC。

其他方面,您的代码存在一些问题。该 首先是你正在测试数组中的索引 (你将把下一个角色放在哪里),而不是反对任何东西 你读过第二个是你正在输入int,所以你 不会看到任何个人角色;只是结果 转换您的输入。 (事实上​​,如果ESC角色有 通过,你将以错误状态结束std::cin。) 第三是你从不测试输入是否有 成功了。

更好的解决方案是采用其他一些惯例 输入:每行说一个数字,空行信号 结束。在这种情况下,您可以编写如下内容:

std::vector<int> a;
std::string line;
std::cout << "..." << std::endl;
while ( std::getline( std::cin, line ) && !line.empty() ) {
    std::istringstream parse( line );
    int value;
    parse >> value >> std::ws;
    if ( !parse ) {
        std::cout << "That wasn't an integer, try again" << std::endl;
    } else if ( parse.get() != EOF ) {
        std::cout << "Extra garbage at end of line, ignoring it" << std::endl;
    } else {
        a.push_back( value );
    }
}

(你会注意到我使用了std::vector,因为你不知道 在前面你会得到多少输入。)

如果你真的想使用ESC,你可能需要第三个 派对图书馆,按照curses的方针,进行原始输入, 一次读一个字符,并将数字收集到 一个字符串,用于使用std::istringstream进行转换。

答案 1 :(得分:0)

不要这样做使用詹姆斯方法更好,并且将运行evrything但只是为了回答你可以做到这一点的问题。这不适用于所有平台它适用于visual c ++编译器。

  # include <iostream>
  # include <conio.h>
  # include <vector>

  using namespace std;




int main()

{

   char key;
   vector<int> a;
   int temp = 0;
   while ((key = getch()) != 27)
  {
     cin >> temp;
     a.push_back(temp); 
  }

  for (int i = 0 ; i < a.size() ; i++)
  {
 cout << a.at(i) << endl;
   }

    printf("Exit");
cout << endl;
system("Pause");
    return 0;

}

编辑:程序现在更清晰。请注意,不应使用此程序,它非常依赖于平台和编译器。