关于c++中cin、cin.get()、cin.getline()、getline()、scanf、gets和getchar的使用方法和详细说明

日常使用 c++的时候,总会接触到多种输入(通常是键盘)读取数据的流对象。
以下是对cin、cin.get()、cin.getline()、getline()、peek()和ignore()六中常用的输入(通常是键盘)读取数据的流对象的详细介绍:

cin

cin是C++标准库中用于从标准输入(通常是键盘)读取数据的流对象。它与输出流对象cout一起使用,可以实现基本的输入输出操作。cin可以用于读取不同类型的数据,如整数、浮点数、字符和字符串等。

cin 的读取规则:

cin的读取字符规则如下:

  1. 当执行cin对象时,会将各种字符读入到缓冲器中,包括回车键(‘\n’)、空格键(’ ‘)、tab键(’\t’)。
  2. 读取时,cin从第一个非空格、非回车、非tab键的位置开始读取,当与所要读取类型一致时则开始读取,遇上空格、tab键不再读取、回车结束。
  3. 缓冲器中光标定位在空格、tab、回车之前。

综上所述,cin的读取字符规则是先存入再读取,遇到空格、tab键或回车结束读取。

使用方法:

int num;
cin >> num;  // 读取一个整数并存储在变量num中

cin.get()

cin.get()的读取规则如下:

  1. 它从标准输入(通常是键盘)读取一个字符,并将其存储在指定的字符变量中。
  2. cin.get()不会忽略空格、制表符或换行符。也就是说,它会将它们作为字符读取。
  3. 当使用cin.get()时,输入流中的下一个字符会被读取,但不会被删除。这意味着在下一次读取操作之前,该字符仍然会留在输入流中。

当一次输入多个字符时,也只会读取第一个字符

以下是使用cin.get()的代码示例:

#include 
using namespace std;

int main() {
    char c;
    cout << "请输入一个字符:" << endl;
    cin.get(c);  // 读取一个字符并存储在变量c中
    cout << "您输入的字符是:" << c << endl;
    return 0;
}

在上述示例中,程序会提示用户输入一个字符。然后,使用cin.get()函数读取用户输入的字符,并将其存储在变量c中。最后,程序输出用户输入的字符。请注意,由于cin.get()不会忽略空格、制表符或换行符,因此如果用户输入了这些字符,它们也会被读取并存储在变量c中。

cin.getline()

cin.getline()的读取规则如下:

  1. 它从标准输入(通常是键盘)读取一行数据,并将其存储在指定的字符串变量中。
  2. cin.getline()会自动忽略空格、制表符和换行符。这意味着在读取一行数据时,这些字符会被跳过,不会被包含在读取的数据中。
  3. cin.getline()可以指定读取的最大长度,以避免缓冲区溢出。如果读取的字符数达到指定的长度,读取将停止,并且输入流中的剩余字符不会被删除。

2 个参数

#include   
#include   
using namespace std;  
  
int main() {  
    string line;  
    cout << "请输入一行字符串:" << endl;  
    cin.getline(line, 100);  // 读取一行字符串并存储在变量line中,最大长度为100  
    cout << "您输入的字符串是:" << line << endl;  
    return 0;  
}

在上述示例中,程序会提示用户输入一行字符串。然后,使用cin.getline()函数读取用户输入的字符串,并将其存储在变量line中。cin.getline()的第二个参数指定了读取的最大长度为100个字符。如果用户输入的字符串长度超过100个字符,那么只有前100个字符会被存储在变量line中,其余的字符仍然会留在输入流中。最后,程序输出用户输入的字符串。

1 个参数

cin.getline()函数可以只写一个参数。在这种情况下,它将读取一行字符串,直到遇到换行符为止,并将读取的数据存储在指定的字符串变量中。同时,它也会自动忽略空格和制表符。例如:

#include 
#include 
using namespace std;

int main() {
    string line;
    cout << "请输入一行字符串:" << endl;
    cin.getline(line);  // 读取一行字符串并存储在变量line中,直到遇到换行符为止
    cout << "您输入的字符串是:" << line << endl;
    return 0;
}

在这个示例中,cin.getline(line)将读取一行字符串,并将其存储在变量line中。读取将一直进行,直到遇到换行符为止。同时,输入流中的空格和制表符将被自动忽略。

0 个参数

cin.getline()函数可以不写参数。在这种情况下,它不会读取任何字符或数据,而是清空输入缓冲区中的换行符。这通常用于在读取一行数据之前清除换行符,以确保读取的数据是完整的。例如:

#include 
using namespace std;

int main() {
    cout << "请输入一行字符串:" << endl;
    cin.getline();  // 清空输入缓冲区中的换行符
    string line;
    cin.getline(line);  // 读取一行字符串并存储在变量line中
    cout << "您输入的字符串是:" << line << endl;
    return 0;
}

在这个示例中,第一次调用cin.getline()函数没有参数,它将清空输入缓冲区中的换行符。然后,第二次调用cin.getline(line)将读取一行字符串,并将其存储在变量line中。

getline()

getline()是一个通用的函数,用于从输入流中读取一行数据,并将其存储在指定的字符串变量中。它可以指定分隔符,以指定读取的数据应在哪种字符之间结束。默认的分隔符是换行符。
使用方法:

string str;
getline(cin, str);  // 读取一行字符串并存储在变量str中,直到遇到换行符为止

用法:接收一个字符串,可以接收空格并输出,需包含“#include”

#include
#include
using namespace std;
main ()
{
string str;
getline(cin,str);
cout<<str<<endl;
}

输入:jkljkljkl
输出:jkljkljkl
输入:jkl jfksldfj jklsjfl
输出:jkl jfksldfj jklsjfl

cin.getline()和getline()

1、cin.getline()属于istream流,而getline()属于string流,是不一样的两个函数
2、当同时使用cin>>,getline()时,需要注意的是,在cin>>输入流完成之后,getline()之前,需要通过

str="\n";
getline(cin,str);

的方式将回车符作为输入流cin以清除缓存,如果不这样做的话,在控制台上就不会出现getline()的输入提示,而直接跳过,因为程序默认地将之前的变量作为输入流。

看下面代码:

#include
#include
#include
using namespace std;
 
int main(){
    int age;
    //standard input(cin)
    cout<<"Please enter an integer value as your age: ";
    cin>>age;
    cout<<"Your ager is: "<<age<<".\n";
    //cin and string
    string mystr;
    cout<<"What's your name? "<<endl;
    mystr="\n";
    getline(cin,mystr);
 
    getline(cin,mystr);
    cout<<"Hello,"<<mystr<<".\n";
    char sex;
    cout<<"Please enter a F or M as your sex: ";
    cin>>sex;
    cout<<"Your sex is: "<<sex<<endl;
    cout<<"What's your favorite team? ";
    mystr="\n";
    getline(cin,mystr);
 
    getline(cin,mystr);
    cout<<"I like "<<mystr<<".\n";
 
    system("pause");
    return 0;
}

scanf、gets和getchar

scanf、gets和getchar是C语言中用于从标准输入(通常是键盘)读取数据的函数。下面是对这三个函数的讲解和示例代码:

1. scanf()
scanf函数用于格式化输入,可以读取多种类型的数据,如整数、浮点数、字符等。
示例代码:

#include 

int main() {
    int a;
    float b;
    char c;
    scanf("%d %f %c", &a, &b, &c);
    printf("整数:%d,浮点数:%f,字符:%c\n", a, b, c);
    return 0;
}

在上述代码中,scanf函数读取用户输入的整数、浮点数和字符,并将它们存储在变量a、b和c中。
2. gets()
gets函数用于从标准输入读取一行字符串,直到遇到换行符或EOF。但是需要注意的是,gets函数存在缓冲区溢出的问题,因此在C语言中不推荐使用。
示例代码:

#include 

int main() {
    char str[100];
    gets(str);
    printf("读取的字符串:%s\n", str);
    return 0;
}

在上述代码中,gets函数读取用户输入的字符串,并将它存储在字符数组str中。需要注意的是,由于gets函数存在缓冲区溢出的问题,因此在实际编程中不推荐使用。可以使用fgets代替。
3. getchar()
getchar函数用于逐个字符地读取输入,每次读取一个字符并返回。当用户输入字符串时,getchar函数可以一次读取一个字符,直到遇到换行符或EOF。
示例代码:

#include 

int main() {
    char ch;
    printf("请输入一个字符:");
    ch = getchar();
    printf("您输入的字符是:%c\n", ch);
    return 0;
}

在上述代码中,getchar函数读取用户输入的一个字符,并将它存储在变量ch中。需要注意的是,getchar函数只能读取一个字符,如果需要读取一行字符串,可以使用gets或fgets函数。

你可能感兴趣的:(C++知识点,c++,开发语言)