scanf函数
声明形式:int scanf(char *format, ...);
scanf函数从标准输入中读取字符序列,按照format中的格式说明对字符序列进行解释,并把结果保存在其余的参数中。
当scanf函数扫描完其格式串,或者碰到某些输入无法与格式控制说明匹配的情况时,该函数终止,返回成功匹配并赋值的输入项的个数。
这里有一个有意思的程序:
#include <stdio.h> int main() { char str[80]; char str1[80]; char str2[80]; scanf("%s",str);/*此处输入:I love you! */ printf("%s",str); sleep(5);/*这里等待5秒,告诉你程序运行到什么地方*/ scanf("%s",str1);/*这两句无需你再输入,是对键盘盘缓冲区再扫描 */ scanf("%s",str2);/*这两句无需你再输入,是对键盘盘缓冲区再扫描 */ printf("\n%s",str1); printf("\n%s",str2); return 0; }
首先要知道的是scanf遇到以下情况会认为一个数据结束输入:
- 遇空格、回车、跳格键
- 遇宽度结束
- 遇非法输入
所以上述程序遇到空格认为一个字符串输入结束,就返回了。剩下的字符串还保留在stdin流中,所以下次调用scanf函数时是在stdin流中读取残余信息。
若是想避免读取到残留信息,直接调用fflush函数清楚缓冲区就行了。
字符串的输入C++
#include <iostream> #include <windows.h> using namespace std; int main(int argc, char *argv[]) { const int ArSize = 20; char name[ArSize]; char dessert[ArSize]; cout<<"请输入名字"<<endl; cin>>name; cout<<"请输入最喜欢的小吃"<<endl; cin>>dessert; cout<<"我有一些"<<dessert; cout<<"给你,"<<name<<endl; system("PAUSE"); return 0; }
这里如果输入为
则得不到正确的结果。这里是因为"cin"每次只读取一个单词,并以空格来标志单词的结束。这样就需要用到get()和getline()函数来读取一行。
getline函数:用于读取一行字符,通过换行符来确定行尾,但不保存换行符。在存储字符串时,用空字符来替换换行符。
const函数
在函数体前加const,例如
void example(type a, type b)const { //// /// }
这就是一个const函数,主要用在类中,用来避免修改类成员变量。一个const对象只能调用类中的const函数。
http://zjw86212.blog.163.com/blog/static/116692085200910394324880/