cin和scanf
用法
-
cin
是C++中标准输入流的对象,用于从标准输入设备(键盘)读取输入数据。例如:cin >> num;
,其中num
是一个变量,表示要读取的数据。 -
scanf
是C语言中的标准输入函数,用于从标准输入设备读取输入数据。例如:scanf("%d", &num);
,其中%d
表示要读取的数据类型为整型,&num
表示要将读取的数据存储到num
变量中。
区别
-
cin
是C++中的输入流,具有更高的面向对象特性,支持类型检查和类型转换,可以自动识别输入数据的类型,并将其转换为对应的变量类型。而scanf
是C语言中的输入函数,需要手动指定要读取的数据类型,并且不支持类型转换,容易出现类型不匹配的问题。 -
cin
通常比scanf
更安全,可以防止缓冲区溢出,不需要手动指定要读取的变量的大小。而scanf
需要手动指定要读取的变量的大小,如果读取的数据长度超出了变量的大小,就会出现缓冲区溢出的问题。
注意点
-
当
cin
和scanf
遇到空格、Tab、回车等空白字符时,会停止输入。
getline和fgets
用法
-
getline
是C++中的标准库函数,用于从输入流中读取一行数据。例如:getline(cin, str);
,其中cin
表示输入流对象,str
表示要存储读取的数据的字符串变量。 -
fgets
是C语言中的标准库函数,用于从输入流中读取一行数据。例如:fgets(buf, sizeof(buf), stdin);
,其中buf
表示要存储读取的数据的字符数组,sizeof(buf)
表示字符数组的大小,stdin
表示输入流对象。
区别
-
getline
可以读取任意长度的字符串,不需要手动指定缓冲区的大小,而fgets
需要手动指定缓冲区的大小,如果读取的数据长度超出了缓冲区的大小,就会出现缓冲区溢出的问题。 -
getline
会自动忽略行末的换行符(),而fgets
不会自动忽略行末的换行符,如果要去掉换行符,需要手动处理。
注意点
-
getline
和fgets
都可以读取带有空格的字符串,但是读取字符串时需要注意缓冲区的大小,防止缓冲区溢出。 -
getline
和fgets
都可以读取特殊字符,如空格、制表符、回车等,但是读取回车时需要注意,因为回车符可能会留在输入缓冲区中,从而影响下一次输入操作。