帮助使用C ++输入和打印字符

时间:2010-03-09 17:32:46

标签: c++ input character

我想从控制台读取字符,只有当它们具有特定值时才会一个接一个地打印出来。

我尝试使用这样的东西:

char c;

while (c != '\n') {
       c = getch();
       if (printable(c)) cout << c; // where printable is a function which checks 
                                    // if the character is of a certain value
}  

但是这不起作用,因为它打印所有的字符,所以任何想法我应该使用什么?

非常感谢!

修改

我想制作多项式计算器,用户输入条件直到按Enter键,但如果用户输入'r'或'R'则会重置输入或'q'和'Q'退出该程序,即使用户输入非法字符,如'@',',',';'等(我也不想'r'或'q'打印)它不会在屏幕上打印它们。

这里也是可打印的功能:

bool printable(char c) 
    {

        return (
                  ((int(c) > 42 && int(c) < 123) || isspace(c)) && int(c) != 44 && int(c) != 46 && int(c) != 47 && 
                  int(c) != 58 && int(c) != 59 && 
                  int(c) != 60 && int(c) != 61 && int(c) != 62 && int(c) != 63 && int(c) != 64 && int(c) != 65 && 
                  int(c) != 91 && int(c) != 92 && int(c) != 93 && int(c) != 95 && int(c) != 96
                ); 
    }

4 个答案:

答案 0 :(得分:2)

您可能希望将cout语句更改为cout << "You just typed: " << c; 这样你就可以看到你是否成功击中了if条件。也发布可打印()。

这是一个只抓取一个字符的示例,不知道为什么你使用getch()你应该使用cin.get,但无论如何你的例子:

bool isPrintable(char c)
 {
     bool isItPrintable=false;

     if ((int)c >= 65)
        isItPrintable=true;

        return isItPrintable;
 }

int main()
{
    char c;

    while (c != '\r')
      {
           c=getch();
           if (isPrintable(c))
             {
                cout << "You just entered: " << c << endl;
             }
      }
    return 0;
}

对于任何想知道的人来说,conio.h都提供了getch()。在我的情况下,我只是检查字符的int表示,如果它是&gt; 65返回true,否则为false。

修改

之所以w和z都出现的原因是w的十进制表示为119,z为123.现在你的isPrintable函数有一个if条件允许这样:

(int(c) > 42 && int(c) < 123)

这将评估为TRUE,因此如果您不想要w,则需要限制该范围。

答案 1 :(得分:1)

你想做这样的事吗?

bool printable(char c)
{
    if ((c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z'))
    {
        return true;
    }
    return false;
}

int main()
{
  char c = ' ';

    while (c != '\r') {
           c = _getch();
    if (printable(c)) cout << c; // where printable is a function which checks 
                                        // if the character is of a certain value
    }  
}

这将只打印字母并按下返回键

结束程序

答案 2 :(得分:1)

有很多方法可以检查字符是否可打印:

  1. isprint()(图书馆例程)
  2. 逐个字符地比较(通过 if
  3. 搜索已知字符的字符串
  4. 表格查找
  5. 图书馆例程isprint

    此功能包含C和C ++语言。阅读参考页面:isprint function

    按字符比较

    在您的功能中,您可以尝试以下内容:
        return c == 65;
    但更可读的语法是:
        return c == 'a';

    搜索已知字符的字符串

    创建可打印字符的常量字符串并搜索它:

    bool is_print(char c)
    {
        static const std::string    printable_chars("ABCDEFGHIJKLMNOPQRSTUVWXYZ");
        return printable_chars.find(c) != std::string::npos;
    }
    

    表查找:

    bool is_print(char c)
    {
        static const char printable_chars[] = {'1', '2', '3', '4', '5', '6'};
        return std::binary_search(printable_chars,
                                  printable_chars + sizeof(printable_chars),
                                  c);
    }
    

答案 3 :(得分:0)

不打印所有字符,终端窗口会回显您键入的字符。如果将其作为program < some_file

运行,您会更清楚地看到这一点

代码还有其他缺陷(例如当没有更多字符时它会做什么?)但这些是其他问题。