C++字符串的行输入

发布于:2025-06-25 ⋅ 阅读:(20) ⋅ 点赞:(0)

1、字符串的输入

        下面用一个真实的示例来进行演示:

#include<iostream>
#include<string>

int main()
{
    using namespace std;
    const int ArSize = 20;
    char name[ArSize];
    char dessert[ArSize];

    cout << "Enter your name:\n";
    cin >> name;
    cout << "Enter your favorite dessert name:";
    cin >> dessert;
    cout << endl;
    cout << "I have some delicions " << dessert << " for you ," << name <<"\n";
    return 0;

}

这里的输出结果是:

Enter your name:
Alistair Dreeb
Enter your favorite dessert name:
I have some delicions Dreeb for you ,Alistair

聪明的小伙伴肯定发现了,这里我们并没有输入dessert,而最后一句直接输出了dessert,这就是cin在处理字符串的缺陷。因为cin手动输入时,我们不能输入空字符,那么cin就要用其他的方式来判断结尾,所以cin就是用空白(空格,制表符和换行符)来判断的。在第一个输入时Alistair作为第一个字符串被放进了输入流中,而Dreeb被当做第二个字符串放入输入流中,因此编译器是将Dreeb当做了dessert的值,所以直接跳过了dessert的输入。这就是其中的原理。

2、每次读取一行字符输入

       在我们生活中,不可能每次都只是输入一个单词,比如我们想输入一个城市名New York或者是San Paulo,这些单词中间都有空格,那我们应该怎样输入这些字符串呢?这里要用到两个相关的函数,分别是getline()函数和get()函数,两个函数都是用来读取一行字符输入的,但是用法却不相同,我们先来讲getline()函数。首先,getline()函数是来自于istream文件中的一个类函数,通过cin对象进行使用,它有两个参数一个是char数组的名称,另一个则是将要输入字符串的大小,例如:cin.getline(name,19),这样可以读取整行的字符串输入(注意输入字符串的字符数不能超过参数所给定的数量),当编译器遇到换行符时,会自动停止读取。另一个函数get()函数与getline()函数的使用方法相同,参数也是相同的,但是唯一不同的是,get()函数会保留换行符,例如:

cin.get(name1,19);

cin.get(name2,19);

此时,编译器只能读取到第一个函数的字符串,而第二个函数只能读取到换行符 ,导致name2为空白,那么我们应该如何来消除这个缺陷呢,刚好这里有个get()函数变体,它不需要参数,可以读取换行符,从而消除缺陷,即:

cin.get(name1,19);

cin.get();

cin.get(name2,19);

这样就可以读取第二个字符串常量了。这里还有一个变式,就是cin.get(name1,19).get(),这样与getline()函数的作用相同。


网站公告

今日签到

点亮在社区的每一天
去签到