首页 > C > 数据类型与变量 阅读:57,774

变量的输入输出

< 上一页 static关键字 运算符大全 下一页 >

3.14.1 printf输出一个数据

一般地,在console程序中,我们可以通过printf函数来输出一个数据的值。它是一个变参函数,它的定义原型如下:

int printf( const char *format, ... );

第一个参数是用来指定要输出的参数对应的数据类型,从第二个参数开始,就是要输出的数据了。

比如要输出一个整数和一个字符数据:

          int a = 100;

          char c=’a’;

          char *str=”hello world”;

          printf(“a=%d,c=%c,str=%s\n”,a,c,str);

     在上面的例子里面,%d对应着要输出的整数a的类型,而%c对应着字符变量c的数据类型,%s对应着字符串str的类型。更多的数据类型如下:

3.14.2 scanf输入一个数据

我们可以使用scanf从键盘输入一个数据,而scanf_swindows平台提供,LINUX无)是对输入函数scanf的一个升级版本,可以防止缓冲区溢出等不安全操作。所以,在程序里建议使用安全操作函数scanf_sscanf函数的定义和printf的定义类似,也是一个变参函数,第一个参数指定待输入的数据类型:

int scanf( const char *format, ... );

比如,下面的例子,分别示例了如何输入各种数据:

char c ;

short s ;

int i ;

char buf[100];

float f;

double d;

scanf(“%c %hd %d %s %f %lf”,&c,&s,&i,buf,&f,&d);

值得注意的是,在用scanf输入数据的时候,必须传变量的地址,所以必须加上&来获取各个变量的地址,但在输入buf字符串的时候,因为buf作为数组的名称,本来就是一个地址了,所以不用加&运算符了。

在程序运行的时候,不同的输入数据之间用空格隔开。注意,scanf无法通过%s输入带有空格的字符串,如果想输入带空格的字符串,需要:

char buf[100];

scanf("%[^\n]", buf);

 

我们已经知道scanf有数据溢出的风险,比如当我们输入的字符串的长度超过100个字符,那么str[100]就无法容纳从而会溢出,而scanf是不会做溢出检测的。所以,需要使用scanf_s来替换上面的函数,每当将数据输入一个buffer的时候,需要同时提供buffer的长度。

char c ;

short s ;

int i ;

char buf[100];

float f;

double d;

scanf_s(“%c %hd %d %s %f %lf”,&c,1, &s,&i,buf,100,&f,&d);

在上面的输入中,在字符变量c后面指定了长度1,在buf后面指定了buf的长度100。这样,当往buf中输入的数据超过了100个字符的时候,scanf_s就能检测到,并拒绝程序继续输入。其它数据类型,不需要指定数据缓存的长度。

 

数组元素的输入:

 

int a[10];

for(int i = 0;i<10;i++)

{

    scanf_s("%d",&a[i]);//注意这里a[i]是数组的第i个元素,所以需要使用&求出它的地址。 

}

 

char buf[80];

scanf_s("%s",buf,80);//这里,输入字符串的时候,数组buf本身就是一个地址,所以,不需要加&符号。

 

注意,scanf先输入整数等数据,再输入字符的时候,要考虑把第一次留在buffer中的回车符flush掉,才能正确输入接下来的字符,比如:

int a;

char c;

scanf_s(“%d”,&a);

fflush(stdin);//这步不能缺少,否则会将在输入整数的时候的换行字符直接赋值给字符变量c

scanf_s(“%c”,&c,1);

此外,还可以使用getchar/getch来从键盘输入一个字符而putchar则可以输出一个字符到屏幕上,其中getchar函数需要按下回车键,会将输入的字符显示在屏幕上,而getch不需要按下回车键,也不会显示在屏幕上,因此经常用来暂停程序等。

可以使用puts/gets函数来输出或者输入一个字符串。

         char ch;

         char name[200];

 

         printf("Please input ch\n");

         ch = getchar();

         putchar(ch);

         putchar('\n');

 

         printf("Please input ch\n");

         ch=getch();

         putchar(ch);

         putchar('\n');

        

         printf("Please input name\n");

 

         gets(name);//gets_s(name,200);

         puts(name);

 

每个进程拥有独立的内存空间,也拥有独立的 fd 号码,程序在启动时都会打开三个流,stdin, stdout, stderr,一个用于输入,一个用于输出,一个用于打印诊断或错误消息。典型的,他们被连接到用户的终端(键盘,屏幕等)。与流stdin, stdout, 和 stderr关联的整数形式的文件描述符fd分别是 0,1 还有2。

 

每个进程生来就有这三个文件描述符绑定在它们身上。


< 上一页 static关键字 运算符大全 下一页 >

周哥教IT,分享编程知识,提高编程技能,程序员的充电站。跟着周哥一起学习,每天都有进步。

通俗易懂,深入浅出,一篇文章只讲一个知识点。

当你决定关注「周哥教IT」,你已然超越了90%的程序员!

IT黄埔-周哥教IT技术交流QQ群:213774841,期待您的加入!

二维码
微信扫描二维码关注