C++ cin.get()不工作

C++ cin.get()不工作,c++,syntax,syntax-checking,C++,Syntax,Syntax Checking,我今天写了这个简单的程序,但是我发现cin.get()拒绝工作,除非有两个。有什么想法吗 #include <iostream> using namespace std; int main(){ int base; while ((base < 2) || (base > 36)){ cout << "Base (2-36):" << endl; cin >> base;

我今天写了这个简单的程序,但是我发现
cin.get()
拒绝工作,除非有两个。有什么想法吗

#include <iostream>
using namespace std;

int main(){
    int base;
    while ((base < 2) || (base > 36)){
          cout << "Base (2-36):" << endl; 
          cin >> base;
          }
    string base_str = "0123456789abcdefghijklmnopqrstuvwxyz";
    for (int i = 0; i < base; i++){
        for (int j = 0; j < base; j++){
            for (int k = 0; k < base; k++){    
                cout << base_str[i] << base_str[j] << base_str[k] << endl;
            }
        }
    }
    cin.get();
    cin.get();
}
#包括
使用名称空间std;
int main(){
int-base;
而((基部<2)| |(基部>36)){
库特基地;
}
字符串基_str=“0123456789abcdefghijklmnopqrstuvxyz”;
for(int i=0;icout变量
base
尚未初始化

您可以通过向
base
提供无效值来修复它,如下所示:

int base = 1; // 1 is not in the valid range.
while ((base < 2) || (base > 36)){
int base=1;//1不在有效范围内。
而((基部<2)| |(基部>36)){

最好使用do while循环,如下所示:

int base;
do{
     cout << "Base (2-36):" << endl;
     cin >> base;
} while ((base < 2) || (base > 36));
int-base;
做{
库特基地;
}而((碱基<2)| |(碱基>36));

需要第二个
cin.get()
的原因是,在使用
cin
读取
base
值后,
\n
会留在缓冲区中。对
cin.get()的第一次调用
消耗
\n
和第二个
cin.get
等待您的输入。为了避免这种情况,您需要调用
cin
cin
后的缓冲区中刷新
\n
。忽略

您没有初始化'base'变量,但这会(直接)导致错误与您在cin中看到的行为相关,尽管有时会导致跳过循环,具体取决于编译器。您可能正在调试模式下构建zero初始化之类的东西

也就是说,假设这是固定的:


键入值时(例如,5)并且,在流中的数据是“代码> 5”/代码>操作程序OHH……由于某些原因,在运行后,流血C++ C++不会暂停代码。我的老师使用MS VisualC++快件,但由于某种原因,这在我的笔记本电脑上崩溃了。(等待按键或输入),更喜欢使用
std::cin.ignore()
。此方法是语言中的标准方法,而不是特定于平台的方法,如
kbhit()
。哎呀。我忘了将其设置为1。while toop无论如何都会运行。感谢您的注意。