簡體   English   中英

std::cin,不需要的行為。 我該如何解決這個問題?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM