如果用户输入的字符过多,则创建错误消息

Creating an error message if user inputs too many characters

本文关键字:创建 错误 消息 用户 输入 字符 如果      更新时间:2023-10-16

我对编码很陌生,所以如果这是微不足道的,我深表歉意。当用户输入的字符数超过我的const int SIZE2数组(即 20 个字符(时,我应该创建一条错误消息。 我的数组称为major

>cout << "Enter your major: " << endl << endl;
>48         cin.width(SIZE2);
>49         cin.get(major,SIZE2, 'n');
>50         majorLength = strlen(major);
>51         
>52         if(majorLength > SIZE2)
>53         {   
>54             cout << "Too many characters, Enter major again: " << endl;
>55             cin.get(major, SIZE2, 'n');
>56             cin.ignore(100, 'n');
>57          
>58         }

它编译得很好,但跳过了我的 if 语句。

iostream.get()(此处调用为cin.get()(读取确切数量的字节,然后结束。在您的情况下,它特别不会将超过SIZE2个字节读取到major中;因此,if(majorLength > SIZE2)永远是错误的。此外,如果输入的字节过多,major将只有前 20 个字节 - 其余的将被截断。(FWIW,您的代码现在只匹配 19 个字符。

请注意,您可能不应该尝试这样做 - 在读取流之前检查流的长度实际上没有一种好方法,如果您决定只读取所有内容然后检查其大小,您将面临溢出缓冲区的风险 - 假设它是固定大小

但是,您可以在读取后确定缓冲区是否为空。要确定缓冲区中是否还有超出SIZE2的输入,您可以使用std::cin.get()捕获一个字符,然后检查该字符。如果字符n,则表示缓冲区中没有更多的输入;如果不是,则意味着字符缓冲区中的输入过多。如果输入完全为空,这也将触发。

#include <iostream>     
int main () {
int SIZE2 = 20;
char str[SIZE2];
char c;
std::cin.get (str, SIZE2+1);    // get c-string of 20 chars
std::cin.get(c); //get last buffer character
if(c != 'n') {
std::cout << "bad input!" << std::endl;
}
std::cout << str << std::endl;
return 0;
}

演示