最近在学习C和C++,除了在写OS的时候用到外,写算法的时候也会用到,整理记录C和C++读取数据的各种方式。 c输出printf()在 stdio.h 中包含最经典的输出函数 printf #include <stdio.h> // 执行 printf() 函数需要该库 int main(){ printf ("hello weiwei" ); //显示引号中的内容 return 0;}格式字符含义 d以十进制形式输出带符号整数(正数不输出符号) o以八进制形式输出无符号整数(不输出前缀0) x,X以十六进制形式输出无符号整数(不输出前缀Ox) u以十进制形式输出无符号整数 f以小数形式输出单、双精度实数 e,E以指数形式输出单、双精度实数 g,G以%f或%e中较短的输出宽度输出单、双精度实数 c输出单个字符 s输出字符串 p,P%p是一个新的格式控制符,它表示以十六进制的形式(带小写的前缀)输出数据的地址。如果写作%P,那么十六进制的前缀也将变成大写形式。标志含义 -结果左对齐 +输出符号(正负号) 空格输出值为正时冠以空格,为负时冠以负号 #对c、s、d、u类无影响; 对o类,在输出时加前缀o; 对x类,在输出时加前缀0x; 对e、g、f 类当结果有小数时才给出小数点。3) 输出最小宽度 用十进制整数来表示输出的最少位数。若实际位数多于定义的宽度,则按实际位数输出,若实际位数少于定义的宽度则补以空格或0。 4) 精度 精度格式符以“.”开头,后跟十进制整数。本项的意义是:如果输出数字,则表示小数的位数;如果输出的是字符,则表示输出字符的个数;若实际位数大于所定义的精度数,则截去超过的部分。 5) 长度 长度格式符为h、l两种,h表示按短整型量输出,l表示按长整型量输出。 #include<cstdio> int main(){ int a=15; float b=123.1234567; double c=12345678.1234567; char d='p' ; printf ("a=%d\n" , a); printf ("a(%%d)=%d, a(%%5d)=%5d, a(%%o)=%o, a(%%x)=%x\n\n" ,a,a,a,a); // %% 可以输出 % printf ("b=%f\n" , b); printf ("b(%%f)=%f, b(%%lf)=%lf, b(%%5.4lf)=%5.4lf, b(%%e)=%e\n\n" ,b,b,b,b); printf ("c=%f\n" , c); printf ("c(%%lf)=%lf, c(%%f)=%f, c(%%8.4lf)=%8.4lf\n\n" ,c,c,c); printf ("d=%c\n" , d); printf ("d(%%c)=%c, d(%%8c)=%8c\n" ,d,d); printf ("&a=%p, &b=%p, &c=%p\n" , &a, &b, &c); // 输出地址 return 0;}- 以四种格式输出整型变量a的值,其中“%5d ”要求输出宽度为5,而a值为15只有两位故补三个空格。
- 以四种格式输出实型量b的值。其中“%f”和“%lf ”格式的输出相同,说明“l”符对“f”类型无影响。“%5.4lf”指定输出宽度为5,精度为4,由于实际长度超过5故应该按实际位数输出,小数位数超过4位部分被截去。
- 输出双精度实数,“%8.4lf ”由于指定精度为4位故截去了超过4位的部分。
- 输出字符量d,其中“%8c ”指定输出宽度为8故在输出字符p之前补加7个空格
输入scanfscanf() 应该是我们所有人接触C语言的第一个输入函数了,输入同样需要指定输入的格式化类型和保存该变量的地址。 #include <cstdio> int main(){ int a, b, c; scanf ("%d %d" , &a, &b); printf ("a+b=%d\n" , a+b); scanf ("%d %d" , &a, &b); printf ("a+b=%d\n" , a+b); scanf ("%d, %d, %d" , &a, &b, &c); printf ("a+b+c=%d\n" , a+b+c); scanf ("%d is bigger than %d" , &a, &b); printf ("a-b=%d\n" , a-b); char letter; int age; char url[30]; // 字符串的定义 float price; scanf ("%c" , &letter); scanf ("%d" , &age); scanf ("%s" , url); //可以加&也可以不加& scanf ("%f" , &price); return 0;}scanf 函数是一种宽松的输入函数,你需要按照你指定的格式来输入,这个时候就可以按照你输入的格式来读取到响应的数据。 从本质上讲,我们从键盘输入的数据并没有直接交给 scanf(),而是放入了缓冲区中,直到我们按下回车键,scanf() 才到缓冲区中读取数据。如果缓冲区中的数据符合 scanf() 的要求,那么就读取结束;如果不符合要求,那么就继续等待用户输入,或者干脆读取失败。 格式控制符说明 %c读取一个单一的字符 %hd、%d、%ld读取一个十进制整数,并分别赋值给 short、int、long 类型 %ho、%o、%lo读取一个八进制整数(可带前缀也可不带),并分别赋值给 short、int、long 类型 %hx、%x、%lx读取一个十六进制整数(可带前缀也可不带),并分别赋值给 short、int、long 类型 %hu、%u、%lu读取一个无符号整数,并分别赋值给 unsigned short、unsigned int、unsigned long 类型 %f、%lf读取一个十进制形式的小数,并分别赋值给 float、double 类型 %e、%le读取一个指数形式的小数,并分别赋值给 float、double 类型 %g、%lg既可以读取一个十进制形式的小数,也可以读取一个指数形式的小数,并分别赋值给 float、double 类型 %s读取一个字符串(以空白符为结束)getchar(), putchar()int getchar(void) 函数从屏幕读取下一个可用的字符,并把它返回为一个整数。这个函数在同一个时间内只会读取一个单一的字符。您可以在循环内使用这个方法,以便从屏幕上读取多个字符。 int putchar(int c) 函数把字符输出到屏幕上,并返回相同的字符。这个函数在同一个时间内只会输出一个单一的字符。您可以在循环内使用这个方法,以便在屏幕上输出多个字符。 #include <stdio.h> int main( ){ int c; printf ( "Enter a value :" ); c = getchar( ); printf ( "\nYou entered: " ); putchar ( c ); printf ( "\n" ); return 0;}gets(), puts()char *gets(char *s) 函数从 stdin 读取一行到 s 所指向的缓冲区,直到一个终止符或 EOF。 int puts(const char *s) 函数把字符串 s 和一个尾随的换行符写入到 stdout。 #include <stdio.h> int main( ){ char str[100]; printf ( "Enter a value :" ); gets( str ); printf ( "\nYou entered: " ); puts ( str ); return 0;}由于 gets 函数具有安全问题,现在已经不推荐使用。 c++输入cin()使用cin输入时,程序将输入视为一系列字节。每个字节都被解释为字符编码。不管数据类型是什么,输入一开始都是字符数据,然后cin对象负责将数据转换成其他类型。 string name;std ::cin >>name;std ::cout <<name;当你输入Michael Jackon时,通运行程序你会发现name只存储了Michael,这是为什么呢? 原来是 cin使用空白(空格,制表符和换行符)来确定字符串的结束位置。 在读取字符数组时,cin将只会读取第一个单词,cin将该字符串放到数组中,并自动添加空字符。Michael Jackon 之间的空格被当作结束符了,而Jackon被继续留在输入队列中,直到下一次读取输入。 getline()getline() 函数用于读取整行,通过回车键来确定输入的结尾。 String name;getline(cin ,name);std ::cout <<name:char name[50];std ::cin .getline(name,50);std ::cout <<name;这是你就会发现读取的是Michael Jackon了。 getline虽然通过读取换行符来读取结尾,但是它并不保存换行符,保存字符串是,他会用空字符来代替换行符。 getline读取完一行时,会从下一行开始读,也就是说我们可以跳过某一行。 假设我们读取文本文件时,不读取某一行,我们可以这样做: string str;getline(cin ,str);get()iostream 中有一个名为get()的变体,他的工作方式和getline()类似。他们接受参数相同,解释参数的方式也相同,并且都读取到行尾。使用get()读取到行尾时不丢弃换行符,而是将它留在输入队列中: cin .get(name,50);cin .get(dessert,50);假设读取了一个字符串,再读取时,读取到的便是换行符了,get()便认为已经到达行尾了,不再继续读取。 我们可以在两次读取之间加一个cin.get();用来读取下一个字符,即使是换行符。 cin .get(name,50);cin .get();cin .get(dessert,50)输出cout预定义的对象 cout 是 iostream 类的一个实例。cout 对象"连接"到标准输出设备,通常是显示屏。cout 是与流插入运算符 << 结合使用的。我们使用 cout 来输出各种类型的数据,而不需要考虑输出数据的类型,使用 endl 来换行。 char str[] = "Hello C++" ;cout << "Value of str is : " << str << endl ;本文对C和C++中常用的输入输出命令做了简单总结,但是暂时还没有涉及到文件的输入输出,之后抽空总结一下C和C++中文件的输入输出。 |