C 语言教程 在线

1544C 输入 & 输出

在输入时注意格式对应:

#include <stdio.h>
int main()
{
    int a;
    float x;
    char c1;
    scanf("a=%d",&a);
    scanf("x=%f",&x);
    scanf("c1=%c",&c1);
    printf("a=%d,x=%f,c1=%c",a,x,c1);
    return 0;
}

若在输入时用错空格键或者换行符,则会出现错误:

a=1 x=1.2 c1=3

上述输入只能输出 a=1 因为空格键取代了 x 的位置 输入完 x=1.2 后空格键有取代了应该输入 c1 的位置。

正确的输入应为:

a=1x=1.2c1=3

1543C 输入 & 输出

scanf 是有返回值的,例如:

#include <stdio.h>
#include <stdlib.h>
int main()
{
    int a;
    int b;
    int c;
    printf("请输入三个整数:");
    int x=scanf("%d%d%d",&a,&b,&c);
    printf("d%\n%d\n",a,x);
}

测试输出:

$ ./a.out 
请输入三个整数:1 2 3
1
3
$ ./a.out 
请输入三个整数:5 6 d
5
2
  • 1、scanf() 函数有返回值且类型 int 型,当发生错误时立刻返回 EOF。
  • 2、scanf() 函数返回的值为:正确按指定格式输入变量的个数;也即能正确接收到值的变量个数。

从上边的例子中可以得到验证,这里用变量 x 接收 scanf() 函数的返回值,并输出显示出来。

1542C 输入 & 输出

有关 putchar 的一个程序。

先后输出BOY三个字符。

例子1:

#include<stdio.h>
int main()
{
    char a='B',b='O',c='Y';
    putchar(a);
    putchar(b);
    putchar(c);
    putchar('\n');
    return 0;
}

例子2:

#include<stdio.h>
int main()
{
    int a=66,b=79,c=89;
    putchar(a);
    putchar(b);
    putchar(c);
    putchar('\n');
    return 0;
}

两个运行结果相同,因为将一个字符赋给字符变量和将字符的 ASCII 代码赋给字符变量作用是完全相同的,但要注意其值必须在字符的 ASCII 代码范围内。

1541C 输入 & 输出

在进行输出时,若要用到用来输出实数的 f 格式符(以小数形式输出),有以下几种用法:

1、基本型,用 %f

不指定输出类型的长度,用系统根据情况决定,一般是实数中的整数部分全部输出,小数部分输出六位。例:

#include<stdio.h>
int main()
{
    double a=1.0;
    printf("%f\n",a/3);
    return 0;
}

运行结果:0.333333

2、指定数据宽度和小数位数,用 %m.nf

例:将上个程序的双精度变量 a 输出 15 位小数,用 %20.15f 的格式声明,指定输出的数据占 20 列,其中包括 15 位小数。改动上面程序如下:

#include<stdio.h>
int main()
{
    double a=1.0;
    printf("%20.15f\n",a/3);
    return 0;
}

运行结果:   0.333333333333333

注意在 0 的前面有 3 个空格,且双精度数只保证 15 位有效数字的准确性。

3、输出的数据相左对齐,用 %-m.nf

m.n 前加一个负号,其作用与 %m.nf 形式作用基本相同,但当数据长度不长过 m 时,数据向左靠,右端补空格。

1540C 输入 & 输出

学 C 语言的时候,字符输入曾经困扰过我,例如这段代码:

int i;
char c;
scanf("%d%c", &i,&c);

这时候变量 c 中存储的往往不是你想输入的字符,而是一个空格,然后我们又会这样来写:

int i;
char c;
scanf("%d", &i);
scanf("%c", &c);

这时候,我们发现,根本没有输入字符C的机会,这是为什么?因为输入流是有缓冲区的,我们输入的字符存储在那,然后再赋值给我们的变量。我们可以这样改:

int i;
char c;
scanf("%d", &i);
while((c=getchar())==' ' || c=='\n');
c = getchar();

这个办法是一直读取,读到没有空格和换行就跳出循环,但是有一个更好的解决办法;

int i;
char c;
scanf("%d%[^' '^'\n']", &i, &c);

这是用正则表达来控制输入格式为非空格非换行。