[英]std::cin , unwanted behaviour. and how can I fix this?
我嘗試使用一些代碼來測試重載函數。 重載部分進展順利,然而,我學到了一些關於 std::cin 的東西,這讓我覺得以前沒有注意到它很愚蠢!
#include <iostream>
void read (int *var){
std::cout<<std::endl<<" input :";
std::cin>>*var;
}
void read (float *var){
std::cout<<std::endl<<" input :";
std::cin>>*var;
}
void read (char *var){
std::cout<<std::endl<<" input :";
std::cin>>*var;
}
void read (bool *var){
std::cout<<std::endl<<" input :";
std::cin>>*var;
}
int main(){
int a;
float x;
char c;
bool s;
// std::cin>>a;
// std::cin>>x;
// std::cin>>c;
// std::cin>>s;
read (&a);
read (&x);
read (&c);
read (&s);
std::cout<<a<<std::endl<<x<<std::endl<<c<<std::endl<<s<<std::endl;
return (0);
}
當使用 g++ 編譯時,會發生以下情況:
$ g++ test1.cpp -o test
$ ./test
input :1.2
input :
input :a
input :0
1
0.2
a
0
我已經嘗試了許多值並在兩者之間添加了一些指令,但我仍然得到相同的行為,如果我嘗試讀取多個值,這很煩人,如果它們是不同類型的更是如此。
注釋文本與下面的“讀取”功能基本相同,並且具有相同的行為。 我正在使用 function 因為我只是想這樣做:D
這不是一個奇怪的行為,真正發生的是在讀取 int function 中執行此行時:
std::cin>>*var;
它期望來自鍵盤緩沖區的 integer 並且當您將其作為輸入輸入時:
1.2
cin object 讀取第一個數字直到小數點,因為它是 integer 部分,並將剩余的字符留在緩沖區中,因此變量a
的值為1
,字符.2
將在緩沖區中被提升。
因此,當讀取浮點 function 執行時,它不會等待您的輸入,因為緩沖區內已經有一個浮點數,因此它會讀取它並將其存儲在變量中,因此它的值變為0.2
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.