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()的主要区别在于它们如何处理终止字符。

 

 

posted on 2023-09-26 13:10  在野武将  阅读(73)  评论(0编辑  收藏  举报