我想从控制台读取字符,只有当它们具有特定值时才会一个接一个地打印出来。
我尝试使用这样的东西:
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
);
}
答案 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)
有很多方法可以检查字符是否可打印:
isprint()
(图书馆例程)if
)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
代码还有其他缺陷(例如当没有更多字符时它会做什么?)但这些是其他问题。