我正在學習 C ,想知道是否有等效于在一行中將用戶輸入分配給變數的方法,例如您可以在 C# 中執行的操作:
string foo = Console.ReadLine();
我希望其中之一會起作用,但它們不起作用。
const string foo = cin >> foo;
cin >> const string foo;
理想情況下,變數應該是常量,但這不一定是必需的。
有沒有一種方法可以用 C 來襯里它,或者我只需要學會忍受這個?
double foo = 0;
cin >> foo;
uj5u.com熱心網友回復:
正如蘋果蘋果所說,您可以撰寫自己的函式
double console_read_double()
{
double x = 0.0;
cin >> x;
return x;
}
int main()
{
double y = console_read_double();
double z = console_read_double();
...
}
然而,C 方式的一個優點是您可以將呼叫鏈接到輸入函式
int main()
{
double y, z;
cin >> y >> z;
...
}
您不能使用回傳讀取值的函式呼叫來做到這一點。
另一個好處是你可以用一行代碼測驗操作的成功或失敗
int main()
{
double y, z;
if (cin >> y >> z)
{
// success
}
else
{
// handle error
}
}
uj5u.com熱心網友回復:
抱歉,但在 C 中無法在一行中執行此操作。除非你在使用 if 陳述句時這樣做:
if(double b = 0; std::cin >> b)
{
// Code
}
否則你將不得不忍受:
double b = 0;
std::cin >> b;
或者你可以像這樣創建一個函式:
auto init_and_input()
{
double b = 0;
std::cin >> b;
return b;
}
接著:
int main()
{
auto x = init_and_input();
}
因此,如果您包含該功能,您的答案就不是真的。
uj5u.com熱心網友回復:
您可以引入自己的命名函式:
std::string getInput()
{
std::string result;
std::cin >> result;
// ...
return result;
}
然后你可以使用它(包括型別推導):
auto input = getInput(); // input is a string
這看起來可能比需要的移動多了很多,但由于某些編譯器魔法(如 RVO),我們可能會在結果中采用與 C# oneliner 中相同的方法。
另請注意,有時我們可以用命名函式呼叫 alike 替換運算子Console.ReadLine();,但在in的情況下不行operator>>std::cin。
uj5u.com熱心網友回復:
除了已經說明的內容之外,在您只需要獲取一個字符的超特定場景中,標準庫還提供函式get()來讀取并回傳流中的一個字符。這允許您使用讀取的值初始化變數,因此您也可以將其定義為const.
#include <iostream>
int main()
{
const char some_char = std::cin.get();
// Do whatever with some_char
return 0;
}
請注意,即使它在理論上是有效的 C ,這看起來也不像任何一種好的做法,并且在幾乎所有情況下最好堅持使用另一種最常見的方式來讀取您的流。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/533910.html
標籤:C 细绳辛
