1、>>输入运算符
空白字符(如空格、换行符 \n
、制表符 \t
)会被输入流自动跳过,直到遇到有效的非空白字符为止,并将连续的空白字符视为单个分隔符。
2、getline()函数
用于从输入流中读取一行文本,包括空格、制表,直到遇到换行符(\n
)为止,并且换行符不会被存储。
如果你想处理不同类型的分隔符,而不是默认的换行符,可以提供自定义的分隔符。例如:
getline(cin, str, ','); // 使用逗号作为分隔符 //输入注意逗号中英文保持一致
①当使用 getline
读取数据时,如果输入流为空或已到达文件的末尾(EOF,End Of File),getline
会失败,停止读取数据,并使得流的状态标志变为错误或失败状态。
-
当你输入内容并按回车时,
getline
会读取一行并显示。 -
如果你按下 Ctrl+Z(Windows)或者 Ctrl+D(Linux/Mac)来模拟输入流的结束,
getline
会返回false
,这时你可以通过检查cin.eof()
来判断输入流是否已经结束。 -
如果输入流发生其他错误,比如没有数据可以读取,如输入格式错误或类型不匹配,如从标准输入流读取数据并超过了缓冲区限制,
cin.fail()
会被设置为true
。按下
Ctrl+Z
时,虽然这标志着输入流的结束,但是在某些情况下(特别是Ctrl+Z
直接在输入流中发生时),C++ 会将 EOF 信号视为 输入错误,因为程序尝试读取但未能得到有效数据,导致cin.fail()
被触发。
cin.ignore()
默认最多忽略 numeric_limits<streamsize>::max()
个字符,直到遇到换行符或 EOF。如果输入流中有字符(例如 a
),但没有换行符,程序可能没有完全忽略字符,导致程序继续处于失败状态。
更改为:
②如果在调用 getline 之前已经使用过 cin 来读取数据,可能会遇到缓冲区中残留的换行符问题。这时,最好在调用 getline 前清空输入流中的多余换行符。
调用 cin.ignore()
会忽略输入缓冲区中的第一个字符,默认情况下忽略一个字符(通常是换行符)。
3、getchar()函数
它从输入缓冲区中获取一个字符,并返回该字符的 ASCII 值(一个整数)。如果没有字符可读取,getchar()
会返回 EOF
,通常表示输入的结束或错误。
- 它不会跳过空格或换行符,每次读取的字符都包括空格和换行符。
- 输入换行(按下
Enter
键)运行结果如下:
-
虽然
getchar()
返回的是字符的 ASCII 值,但是在cout
输出时,它会把这个 ASCII 值当作字符来处理并显示。cout << "该字符的 ASCII 值是: " << int(ch) << endl; // 输出 ASCII 值 -
输入了: hello world空格TAB!! 运行结果如下:
4、文本文件——读文件
①包含头文件:#include <fstream>;
②创建流对象:ifstream ifs;
③打开文件并判断文件是否打开成功 ifs.open("文件路径",打开方式);
④读数据;
⑤关闭文件 ifs.close();