C++程序获取用户输入
在任何语言中编写程序时,获取输入是我们在几乎所有程序中都会执行的基本操作。有时我们直接从控制台获取输入,或者从文件中获取输入。从文件获取输入在某种程度上是有益的,因为它不需要我们一遍又一遍地输入,或者有时我们可以将一些好的输入测试用例保存到文件中。但是,在本文中,我们将重点关注基于控制台的输入。我们将学习在 C++ 中获取用户输入的不同技术。
从控制台获取输入有几种不同的方法。其中一些是 C 语言风格的方法,还有一些是使用 C++ 中提供的输入流。我们将逐一介绍它们,并提供一些示例以更好地理解。
使用 scanf() 函数获取输入
在 C 语言中,我们使用 scanf() 函数使用格式化字符串从控制台扫描输入。此函数在 C++ 中也可用,因此要以格式化的方式获取输入,scanf() 方法是很好的选择。
语法
scanf() 方法的基本语法以及格式化字符串。
scanf ( “<format string>”, <address of variable> );
scanf() 格式化的格式说明符。
格式说明符 | 描述 |
---|---|
%c | 用于单个字符输入 |
%s | 用于没有空格的字符串 |
%hi | 短整型(带符号) |
%hu | 短整型(无符号) |
%Lf | 长双精度浮点数 |
%d | 十进制整数(带符号),假设基数为 10 |
%i | 整数(自动检测基数) |
%o | 八进制整数 |
%x | 十六进制整数 |
%p | 指针 |
%f | 浮点数 |
示例 1
#include <iostream> using namespace std; void takeInput() { int x; char s[50]; // C like string or character array char c; float f; cout << "Enter an integer: "; scanf( "%d", &x ); cout << "\nYou have entered an integer: " << x << endl; cout << "Enter a character: "; scanf( " %c", &c ); cout << "\nYou have entered a character: " << c << endl; cout << "Enter a float value: "; scanf( "%f", &f ); cout << "\nYou have entered float value: " << f << endl; cout << "Enter a string: "; scanf( "%s", s ); //string do not need address //convert to C++ like string from C like string string SCpp; SCpp.assign(s); cout << "\nYou have entered the string: " << SCpp << endl; } int main(){ takeInput(); }
输出
Enter an integer: 5 You have entered an integer: 5 Enter a character: K You have entered a character: K Enter a float value: 2.56 You have entered float value: 2.56 Enter a string: HelloWorld You have entered the string: HelloWorld
在这种方法中,它适用于其他数据类型,但对于字符串,它只接受 C 风格的字符串或字符数组。要使用“cout”显示字符串,我们需要将其转换为 C++ 风格的字符串对象。否则,我们可以使用 printf() 函数显示输出。这些是基本示例。现在让我们在下一个示例中看看格式化字符串的效果。
示例 2
#include <iostream> using namespace std; void takeInput() { int dd, mm, yyyy; cout << "Enter a date in dd-mm-yyyy format: "; scanf( "%d-%d-%d", &dd, &mm, &yyyy ); cout << "\nThe given date is: "; printf( "%d/%d/%d", dd, mm, yyyy ); } int main(){ takeInput(); }
输出
Enter a date in dd-mm-yyyy format: 14-10-2022 The given date is: 14/10/2022
在这个例子中,我们以 (dd-mm-yyyy) 的格式获取输入,这不会以任何其他格式接受这三个整数值。在我们的输出中,我们以另一种格式 (dd/mm/yyyy) 显示相同的日期。这就是格式化字符串输入的实际用途。接下来,我们将看到在 C++ 中使用“cin”输入流直接获取任何类型数据到指定变量的更简单的形式。
在 C++ 中使用 cin 获取输入
cin 是一个 C++ 输入流类,它使用提取运算符 >> 从流中获取输入。此运算符通过从控制台获取输入,自动将值插入到指定的变量中。语法如下所示。
语法
cin 方法的基本语法
cin >> <input variable name>
示例 1
#include <iostream> using namespace std; void takeInput() { int x; string s; char c; float f; cout << "Enter an integer: "; cin >> x; cout << "\nYou have entered an integer: " << x << endl; cout << "Enter a character: "; cin >> c; cout << "\nYou have entered a character: " << c << endl; cout << "Enter a float value: "; cin >> f; cout << "\nYou have entered float value: " << f << endl; cout << "Enter a string: "; cin >> s; cout << "\nYou have entered the string: " << s << endl; } int main(){ takeInput(); }
输出
Enter an integer: 8 You have entered an integer: 8 Enter a character: L You have entered a character: L Enter a float value: 3.14159 You have entered float value: 3.14159 Enter a string: WeAreLearningC++InputTaking You have entered the string: WeAreLearningC++InputTaking
与其他变量一样,我们也可以直接获取字符串,而无需将其作为字符数组。在这种方法中,它会自动将给定的输入分配给字符串对象。但是,字符串存在一个问题。我们不能以这种方式输入多单词字符串。如果我们写一个多单词字符串,它只会获取第一个单词。让我们在下面的例子中看看这一点。
示例 2
#include <iostream> using namespace std; void takeInput() { string s; cout << "Enter a string: "; cin >> s; cout << "\nYou have entered the string: " << s << endl; } int main(){ takeInput(); }
输出
Enter a string: Hello World, This is a nice day You have entered the string: Hello
为了克服这个问题,我们需要使用 getline() 函数获取带空格分隔的单词的字符串。在这种方法中,当遇到换行符时,它将结束读取文本。
语法
getline(std::cin, <string variable>)
示例 3
#include <iostream> using namespace std; void takeInput() { string s; cout << "Enter a string: "; getline(cin, s); cout << "\nYou have entered the string: " << s << endl; } int main(){ takeInput(); }
输出
Enter a string: Hello World, Have a nice day You have entered the string: Hello World, Have a nice day
结论
在本文中,我们了解了使用 scanf() 方法以及 cin 流读取器从用户获取输入的不同用法。获取输入到任何其他变量类型都很简单。但是,%s 格式说明符和 cin 类都不能获取带空格的输入字符串。与 C 语言类似,C++ 中也存在一个指定函数来读取带空格分隔单词的字符串。getline() 方法可以用来获取这样的输入字符串。我们还可以从文件以及字符串流中获取输入。