1 #include <iostream> 2 using namespace std; 3 int main() 4 { 5 //cin.get输入字符 6 // //char c; 7 /*while ((c = cin.get()) != EOF) 8 { 9 cout << c; 10 }*/ 11 /* while (cin.get(c)) 12 { 13 cout << c; 14 }*/ 15 //while (c = getchar()) 16 //{ 17 // cout << c; 18 //} 19 20 //输入字符串 21 //char a[10] = "Computer"; 22 //a[9] = 10; 23 //cout << a << endl 24 // << a[4] << endl; 25 26 27 //char str[10]; 28 //cout << "enter a sentence: " << endl; 29 //while (cin >> str)//不断的重新给数组赋值 30 //{ 31 // cout << str << endl;//输出的是数组中被赋值的所有值,空格和回车均代表重新赋值,同时手动输入\0会被读取成字符而不是结束标志 32 // cout << "str0 :" << str[0] << endl; 33 34 //} 35 // 36 //cin.get函数输入字符串,遇到终止字符,指针不移动 37 //cin.get(str, 10, 'o');//设置o为指定终止符(如果不设定则默认换行是指定终止符),输入o代表提前终止,即在str[9]的赋值之前终止,如果没有指定终止符则会把数组所有元素复制完后自动终止。空格和回车均会读取 38 //cout << str << endl; 39 // 40 //cin.getline函数输入字符串,会再在输入缓冲中保存换行符,而cin.get()会(当然,cin也会)。就是说,如果输入一行字符串,如果用cin.getline(),那么当内容输入到变量中后,输入缓冲中也不会有回车符,不会影响下一个输入函数的读取; 41 /*char a[10][10]; 42 int n = 0; 43 cin >> n; 44 for (int i = 0; i < n; i++) 45 { 46 cin.get(a[i], 10); 47 } 48 for (int i = 0; i < n; i++) 49 { 50 cout << a[i] << endl; 51 } 52 */ 53 char a[10][10]; 54 int n = 0; 55 cin >> n; 56 cin.get();//56行 因为人们习惯性的换行换行作为终止标识符,cin>> n,后换行会把一个终止标识符读书输入缓冲区,而cin.getline会把这个终止标识符读进去(读一次后指针跳到终止标识符后),使得这个标识符占用了一个数组位,使得输入的数的数目比期望值少1 57 for (int i = 0; i < n; i++) 58 { 59 cin.getline(a[i], 10);//这里如果用cin.get,就会输入失败,因为cin会把指针停止在停止标识符哪里,则读后面的函数输入之前会反复读入停止标识符,则还没输入就停止了。参数10的意义是如果没遇到终止标识符就读完a[9】然后停止
60 } 61 for (int i = 0; i < n; i++) 62 { 63 //cout << "a[0] :" << a[0] << endl; 如果不要56行的cin.get();读掉终止标识符,a[0]的值就会是哪个终止标识符,为什么不用 cin.getline();因为cin.getline();一定要有参数,更麻烦
64 cout << a[i] << endl; 65 } 66 67 68 69 return 0; 70 }
当cin.get读取一个字符后指针会跳到该字符后面,而读取终止标识符后,指针会停在终止标识符前面
而cin.getline,无论如何读取后指针始终会在字符后面,即算是遇到终止标识符
cin.get(ch, 10, 'n')
和cin.getline(ch, 10, 'n')
在功能上是相似的,都是从输入流中读取字符,直到遇到指定的终止字符或者达到指定的最大长度。但是,它们在处理终止字符后的行为上有所不同。
-
cin.get(ch, 10, 'n')
会读取字符,直到遇到终止字符’n’,或者读取了9个字符。但是,它不会读取终止字符’n’,这个字符会留在输入流中。所以下一次调用cin.get()
或者cin.get(ch, 10, 'n')
时,它会读取这个终止字符。 -
cin.getline(ch, 10, 'n')
也会读取字符,直到遇到终止字符’n’,或者读取了9个字符。但是,它会读取并丢弃终止字符’n’。所以下一次调用cin.getline()
时,它会从新的一行开始读取。
所以,cin.get()
和cin.getline()
的主要区别在于它们如何处理终止字符。