关于一直记不清弄不明的scanf("%s", a) gets() getline()
scanf("%s", a) 对于char型数组使用 读取一串字符,遇到空格停止
gets(a) 对于char型数组使用 读取一行字符,并且需要注意使用 gets() 时,系统会将最后“敲”的换行符从缓冲区中取出来,然后丢弃,所以缓冲区中不会遗留换行符。这就意味着,如果前面使用过 gets(),而后面又要从键盘给字符变量赋值的话就不需要再用 getchar() 吸收回车清空缓冲区了,因为缓冲区的回车已经被 gets() 取出来扔掉了。
gets()在c语言里好像不能用
getline(cin, a) 对于string类使用 读取一行
getline()的原型是istream& getline ( istream &is , string &str , char delim );
其中 istream &is 表示一个输入流,譬如cin;string&str表示把从输入流读入的字符串存放在这个字符串中(可以自己随便命名,str什么的都可以);char delim表示遇到这个字符停止读入,在不设置的情况下系统默认该字符为'\n',也就是回车换行符(遇到回车停止读入)。如果自己设置非'\n'终止符,则正常读入'\n',不会终止
注: while(getline(cin,line)) 不会跳出循环,while判断的是 cin 而非 line
getline()中的结束符不读入,结束后,结束符不放入缓存区;
cin的结束符(空格、换行),结束后,结束符还在缓存区;
所以在使用完cin 再使用 getline 时,注意要用 getchar() 吸收一下
浙公网安备 33010602011771号