格式化输出函数:printf
(一)、输出格式:整型和短整型:%d 长整形:%ld 浮点型:%f 双精度型:%lf 输出地址:%p 换行:\r、\n(二)、printf的行缓冲:
1、int main()
{
printf("hello world");
while(1);
}
上面的程序并不能输出,原因是printf在遇到\n才会输出。
2、
int main()
{
printf("hello world");
return 0;
}
此情况也会输出,原因是函数结束需要释放内存空间
3、
int main()
{
printf("hello world");
scanf("%s",str);
while(1);
}
此情况也会输出,因为scanf和printf处于同一缓存区,要将printf先释放
综上,输出printf最好加一个\n
1、可以 修改字体颜色
2、选择地点打印等等
其他一些输出函数
1、putchar:putchar("\n"); 回车 putchar不自动换行2、puts:puts(str) puts有自动换行功能
3、putc:putc(ch,stdout),将ch输出至终端
格式化输入函数scanf
(一)、为什么叫格式化?比如:scanf("num = %d",&num),在输入的时候,要输入 num = 5,就死一定要按照他的格式来输入。
(二)、scanf的小问题:
int main()
{
……
scanf("%d",&num);
scanf("%c",&ch);
}
这是如果界面上显示让你输入,程序并不会停下来让你输入第二个字符,因为第二个scanf捕获了回车,但是如果反过来的话就可以,因为\n是一个字符,而%d是一个整型,所以会停下来等待输入
可以这样解决上面的问题:
int main()
{
……
scanf("%d",&num);
getchar();
scanf("%c",&ch);
}
用getchar将\n吸收掉即可
第二的小问题:
如果在程序中有:
scanf("%lf",&b);
printf("%f",&b);
那么会输出乱码,因为在输入时,系统给b分配八个字节的空间,而输出只有四个字节
字符串的处理
(一)、如果有此程序:char *ptr;
printf("Please input a string:");
scanf("%s",ptr);
是不行的,因为ptr并没有赋予它首地址,它是一个野指针
(二)、输入字符串的三种方法:
1、
char ptr[100];
printf("Please input a string:");
scanf("%s",ptr);
此方法缺点:不能有空格,不能输入句子
2、
char ptr[100];
printf("Please input a string:");
gets(ptr);
此方法缺点:会造成溢出
3、
while((ch = getchar()) != '\n')
{
ptr [i] = ch;
i ++;
if(i == 100)
break;
}
此方法缺点:效率低下