一,printf和scanf函数返回值的运用和其中的注意要点
scanf函数返回值等于scanf中的参数个数,若有n个参数,则返回值为n
printf函数返回值比较特殊,函数的返回值为参数的个数与字符数的和
代码实现如下:
#include <stdio.h> int main() { int m, n, a=4, b; m = printf("Hello world!\n");//其中有'\n'转义字符,也算上一个字符 n = printf("Hello world!"); b = printf("%d", a); printf("\n%d\n", b);//数值为1,因为只有a这一个参数 b = printf("%d\n", a); printf("%d", b);//数值为2,因为有a,和'\n'两个参数 printf("%d %d", m, n);//其中m输出值为13,n输出值为12 return 0; }
例题:
用scanf函数作为循环的运用判断三角形的形状 (主要是掌握scanf函数的返回值)
#include <stdio.h> int main() { int a, b, c, x, y, z; while (scanf("%d %d %d", &a, &b, &c) == 3)//在键盘上按下Ctrl+c即可终止循环 { if (a + b > c && a + c > b && b + c > a) { if (a == b && b == c) puts("Equilateral triangle!"); else if (a == b || a == c || c == b) puts("Isosceles triangle!"); else puts("Ordinary triangle!"); } else puts("Not a triangle!"); } return 0; }
二,字符与字符串与整形之间的转换的注意要点
对于一些数值过大的数,例如99999999999999999999,长度过大,即便用long long型都不能存储下,这是就要用字符数组进行存储,但要注意,存储完之后要在字符数组的末尾加上'\0'字符,表示结束,否则将会出现错误
例题:
#include <stdio.h> #include<string.h> int main() { int age, n = 0, i, j, k,a[100]; char second[100]; scanf("%d", &age); k = 3156 * age; while (k > 0) { j = k % 10; a[n] = j; n++; k /= 10; } for (i = n - 1, j = 0; i >= 0; --i, ++j) second[j] = a[i] + 48; second[j] = '\0'; //如果没有这一步second[j]里面什么数据都没有,即second中没有结束标识符'\0',second中不会结束,将自动往后取值,产生错误 strcat(second, "0000");//字符串的添加用此函数,单个字符可直接添加或赋值 puts(second); return 0; }//注意;对于int n和char arr[100];不可用arr[i]=(char)(n)进行转换,用其ASCII值,即arr[i]=n+48;
三,long long,long,int三个类型的注意
对于long long,long,int,%lld输出的是long long,%ld输出的是long,%d输出的是int
#include <stdio.h>
int main()
{
int age = 0;
scanf("%d", &age);
long long sec = age * 3.156e7;
printf("%lld\n", sec);
return 0;
}
很多人就是将类型转换完之后就忘记了对应的输出类型,若是输出类型没有与之对应,则将会出现错误答案 。