1、printf是有返回值的你咋造吗?
返回值是输出的长度
#include <stdio.h>
{
int n;
scanf("%d",&n);
n=printf("%d",n);
printf(" has %d digits\n",n);
return 0;
}
若输入“321”,则会输出“ 321 has 3 digits”
增强理解
2、scanf接收空格的方法
#include <stdio.h>
{
int n;
char str[100];
scanf("%[^\n]",str);
n=printf("%s",str);
printf(" has %d digits\n",n);
return 0;
}
【[ ^\n ]】的意思是除了换行符以外,这样scanf就可以接收带空格的字符串了
3、sprintf的应用
#include <stdio.h>
#define swap(a, b){\ //???
__typeof(a)__temp = a; \
a = b; b = __temp;\
}
int main()
{
int n;
scanf("%d",&n);
printf("%d\n", n);
char str[1000] = {0};
buffer[1000] = {0};
*p = str;
*q= buffer;
sprintf(str,"%d.%d.%d.%d",192,168,1,2);
printf("%s\n", str);
if (n & 1) //???
{
sprintf(q,"(%s)",p);
swap(p,q);
if (n & 2)
{
sprintf(q,"[%s]", p);
swap(p,q);
}
if (n & 4)
{
sprintf(q,"{%s}", p);
swap(p,q);
}
printf("%s\n", p);
return 0;
}
n % 2就等价于n & 1
输出:
4、fprintf的应用
#include <stdio.h>
#define swap(a, b){\
__typeof(a)__temp = a; \
a = b; b = __temp;\
}
int main()
{
int n;
scanf("%d",&n);
printf("%d\n", n);
char str[1000] = {0};
buffer[1000] = {0};
*p = str;
*q= buffer;
sprintf(str,"%d.%d.%d.%d",192,168,1,2);
printf("%s\n", str);
if (n & 1)
{
sprintf(q,"(%s)",p);
swap(p,q);
if (n & 2)
{
sprintf(q,"[%s]", p);
swap(p,q);
}
if (n & 4)
{
sprintf(q,"{%s}", p);
swap(p,q);
}
printf("%s\n", p);
FILE *fout = fopen( "output", "w");
fprintf(fout,"str = %s\n", p);
return 0;
}
用FILE这一文件类型定义一个fout的文件指针,他存储的是一个文件描述符,用fopen这样一个方法去打开一个文件,文件名output,w为写入操作
此时执行:
会发现fprintf并没有显现出来,通过ls查询可以看到有一个output文件,打开即可看到fprintf的输出结果
5、stdout标准输出的应用
#include <stdio.h>
#define swap(a, b){\
__typeof(a)__temp = a; \
a = b; b = __temp;\
}
int main()
{
int n;
scanf("%d",&n);
printf("%d\n", n);
char str[1000] = {0};
buffer[1000] = {0};
*p = str;
*q= buffer;
sprintf(str,"%d.%d.%d.%d",192,168,1,2);
printf("%s\n", str);
if (n & 1)
{
sprintf(q,"(%s)",p);
swap(p,q);
if (n & 2)
{
sprintf(q,"[%s]", p);
swap(p,q);
}
if (n & 4)
{
sprintf(q,"{%s}", p);
swap(p,q);
}
printf("%s\n", p);
FILE *fout = fopen( "output", "w");
fprintf(stdout,"stdout = %s\n", p);
return 0;
}
此时结果出现在终端上,因为终端就是标准输出的一个界面
6、stderr标准错误的应用
#include <stdio.h>
#define swap(a, b){\
__typeof(a)__temp = a; \
a = b; b = __temp;\
}
int main()
{
int n;
scanf("%d",&n);
printf("%d\n", n);
char str[1000] = {0};
buffer[1000] = {0};
*p = str;
*q= buffer;
sprintf(str,"%d.%d.%d.%d",192,168,1,2);
printf("%s\n", str);
if (n & 1)
{
sprintf(q,"(%s)",p);
swap(p,q);
if (n & 2)
{
sprintf(q,"[%s]", p);
swap(p,q);
}
if (n & 4)
{
sprintf(q,"{%s}", p);
swap(p,q);
}
printf("%s\n", p);
FILE *fout = fopen( "output", "w");
fprintf(stdout,"stdout = %s\n", p);
fprintf(stderr, "stderr = %s\n", p);
return 0;
}
标准输出重定向【./a.out > output】
再运行时,选定蓝框的东东就没有了,输出的结果进入到output这个文件夹里了
stdin是标准输入