zoukankan      html  css  js  c++  java
  • 字符串的输入问题 C++

       C++中,初学时最常用的输入字符的方式为cin,但是,cin是如何确定已经完成了字符串的输入了呢?由于不能通过键盘输入空字符(""),因此cin需要用别的方法来确定字符串的结尾位置。cin使用空白(空格,制表符和换行符)来确定字符串结束的位置,这意味着cin在取字符数组输入时只能读取一个单词。读取该单词后,cin将该字符串放到数组中,并自动在结尾添加空字符。如下的程序所示:

    #include<iostream>
    using namespace std;
    int main()
    {   
        const int size = 20;
        char  name[size];
        char desert[size];
        cout << "请输入你的名字:
    ";
        cin >> name;
        cin.get();
        cout << "请输入你最喜欢的甜食:
    ";
        cin >> desert;
        cin.get();
        cout << "I have some delicious " << desert << " for you," << " . 
    ";
        cin.get();
        return 0;
    }

    程序运行结果:

      请输入你的名字:
      xiao ming
      请输入你最喜欢的甜食:
      I have some delicious ming for you, .

      你看,上图中的运行程序,我还没有对我最喜欢的甜食输入呢,程序就迫不及待的显示了下面的内容。这是因为:cin把xiao作为了第一个字符串,并把它放入了name数组中,把ming这个字符串留在了输入队列中。当cin在输入队列中搜索用户喜欢的甜点时,它发现了ming,因此它读取ming,并把它放入了dessert数组中。

      那么,如何输入一行的字符串呢?

    一、面向行的输入:getline()与get()

    1. getline()

      getline()函数用于读取整行,它使用通过回车键键入的换行符来确定输入结尾。该函数有两个参数,第一个参数是用来存储输入行的数组的名称,第二个参数是要读取的字符数。如下面的代码所示就能避免只读取一个单词的错误:

    #include<iostream>
    using namespace std;
    int main()
    {   
        const int size = 20;
        char  name[size];
        char dessert[size];
        cout << "请输入你的名字:
    ";
        cin.getline(name, size);
        cout << "请输入你最喜欢的甜食:
    ";
        cin.getline(dessert, size);
        cout << "I have some delicious " << dessert << " for you.
    " ;
        cin.get();
        return 0;
    }

    程序运行结果:

    请输入你的名字:
    xiao ming
    请输入你最喜欢的甜食:
    ice cream
    I have some delicious ice cream for you.

    getline()函数每次读取一行,它通过换行符来确定行尾,但不保存换行符。相反,在存储字符串时,他用空字符来替换换行符。

    2.get()

    get的用法和getline()函数一样。但是,get()函数会保存换行符。先看个例子:

    cin.get(name,size);

    cin.get(name,size);

      就是连续调用了两次get(),由于第一次调用后,换行符将保留在输入队列中,因此,第二次调用时看到的第一个字符便是换行符,因此get()认为以到达结尾,而没有发现任何可读取的内容。

      那么,如何解决这种问题呢?有以下两种方式:

    (1)                              

    cin.get(name,size);

    cin.get(); // 使用不带任何参数的get()可读取下一个字符(即使是换行符),因此,可通过它来处理换行符,为读取下一行输 入做好准备

    cin.get(name,size);

    (2)cin.get(name,size).get()

    程序如下所示:

    #include<iostream>
    using namespace std;
    int main()
    {   
        const int size = 20;
        char  name[size];
        char dessert[size];
        cout << "请输入你的名字:
    ";
        cin.get(name, size).get();
        cout << "请输入你最喜欢的甜食:
    ";
        cin.get(dessert, size).get();
        cout << "I have some delicious " << dessert << " for you.
    " ;
        cin.get();
        return 0;
    }

    运行结果:

    请输入你的名字:
    xiao ming
    请输入你最喜欢的甜食:
    ice cream
    I have some delicious ice cream for you.
  • 相关阅读:
    js原始数据类型和引用数据类型=>callback数据传输原理
    wamp虚拟服务器
    chrome 跨域设置-(完善博客内容)
    js原生API----查找dom
    正则表达式
    ajax ----进度条的原理
    ajax 原理----初级篇
    转载 webstrom识别 React语法
    javascript性能优化
    JavaScript DOM
  • 原文地址:https://www.cnblogs.com/carlber/p/9862615.html
Copyright © 2011-2022 走看看