puts/gets 和 scanf/printf 用法上的区别...

如题所述

一、调用形式不同

gets()函数实现字符串的输入,其调用形式为:gets(字符数组);

调用puts()函数实现字符串的输出,其调用形式为:puts(字符数组);

二、格式

scanf语句的一般格式如下:

scanf("格式字符串", 地址,…);

printf语句的一般形式如下:

printf( "格式字符串", 表达式, ... );

该语句将"表达式"按照"格式字符串"给定的格式,显示在屏幕上。"格式字符串"包括文本字符、转义字符和格式说明符。

三、结束方式

使用scanf("%s", &s)函数输入字符串时存在一个问题, 就是如果输入了空格会认为输入字符串结束,空格后的字符将作为下一个输入项处理, 但gets() 函数将接收输入的整个字符串直到回车为止。 

温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-12-19
1. 字符串输入函数gets()
调用gets()函数实现字符串的输入,其调用形式为:
gets(字符数组);
功能:从终端输入一个字符串(包括空格)赋给从字符数组起始的存储单元中,直到读入一个回车符为止。回车符读入后,不作为字符串的内容,系统将自动用’\0’替换,作为字符串结束的标志。如:
char c[20];
gets(c);
执行上面的语句,如果输入:How are you!<CR>
则将读入的12个字符依次存入到c[0]开始的存储单元中,并在其后自动加入一个字符串结束标志’\0’。
2.字符串输出函数puts()
调用puts()函数实现字符串的输出,其调用形式为:
puts(字符数组);
功能:将字符数组起始地址开始的一个字符串(以’\0’结束的字符序列)输出到终端,并将字符串结束标志’\0’转化成’\n’,自动输出一个换行符。如:
char c[ ]= "How\nare\nyou!";
puts(c);
输出结果:
How
are
you!

printf和scanf是标准的C输出输入语句,在C语言标准的头文件stdio.h中定义。但在C++中,它们也能够被使用。
一、 printf输出
   printf语句的一般形式如下:
   printf( "格式字符串", 表达式, ... );
   该语句将"表达式"按照"格式字符串"给定的格式,显示在屏幕上。"格式字符串"包括文本字符、转义字符和格式说明符。
   如果我们只要打印简单的信息,并不需要包括"表达式",例如,要打印信息:"今天是星期二",可以使用下面的printf语句:
   printf("Today is Thursday");
   这个语句执行的结果为: Today is ThursdayPress any key to continue
   需要注意的是:输出的信息与系统提示连在一起。为了解决这个问题,可以使用转义字符,常用的转义字符参见2.4.3节的内容。
二、 scanf输入
   scanf语句的一般格式如下:
   scanf("格式字符串", 地址,…);
   scanf语句用"格式字符串"控制键盘读入的方式。"格式字符串"中一般只包括格式说明符,它们与printf语句中的一样,而"地址"是指变量在内存中的位置。我们看看下面的程序实例,它定义了一个int、float、char和char []变量,并使用了格式说明符:
#include <stdio.h>
#define MAX_WORD 20
void main()
{
  int x;
  float a;
  char ch, empty;
  char word[MAX_WORD];

 printf("Enter an integer: ");
  scanf("%d", &x);

 printf("Enter a float: ");
  scanf("%f", &a);

 fflush(stdin); // 清空输入缓冲区
  printf("Enter a character: ");
  scanf("%c", &ch);

 printf("Enter a string: ");
  scanf("%s", word);

 printf("Your integer was: %d\n", x);
  printf("Your float was: %f\n", a);
  printf("Your character was: %c\n", ch);
  printf("Your word was: %s\n", word);
}
第2个回答  推荐于2018-02-27
printf()函数
printf()函数是格式化输出函数, 一般用于向标准输出设备按规定格式输出信息。在编写程序时经常会用到此函数。printf()函数的调用格式为:
printf("<格式化字符串>", <参量表>);
其中格式化字符串包括两部分内容: 一部分是正常字符, 这些字符将按原
样输出; 另一部分是格式化规定字符, 以"%"开始, 后跟一个或几个规定字符,
用来确定输出内容格式。

scanf()函数
scanf()函数是格式化输入函数, 它从标准输入设备(键盘) 读取输入的信息。其调用格式为:
scanf("<格式化字符串>", <地址表>);
格式化字符串包括以下三类不同的字符;
1. 格式化说明符: 格式化说明符与printf()函数中的格式说明符基本相同。
2. 空白字符: 空白字符会使scanf()函数在读操作中略去输入中的一个或多个空白字符。
3. 非空白字符: 一个非空白字符会使scanf()函数在读入时剔除掉与这个非空白字符相同的字符。
地址表是需要读入的所有变量的地址, 而不是变量本身。这与printf()函数完全不同, 要特别注意。各个变量的地址之间同","分开。

puts()函数
puts()函数用来向标准输出设备(屏幕)写字符串并换行, 其调用格式为:
puts(s); 其中s为字符串变量(字符串数组名或字符串指针)。
puts()函数的作用与语printf("%s\n", s)相同。

gets()函数
gets()函数用来从标准输入设备(键盘)读取字符串直到回车结束, 但回车符不属于这个字符串。其调用格式为:
gets(s);
其中s为字符串变量(字符串数组名或字符串指针)。
gets(s)函数与scanf("%s", &s)相似, 但不完全相同, 使用scanf("%s", &s)函数输入字符串时存在一个问题, 就是如果输入了空格会认为输入字符串结束,空格后的字符将作为下一个输入项处理, 但gets() 函数将接收输入的整个字符串直到回车为止。

printf scanf是格式化输入输出函数:更清晰标准
puts gets是非格式化输入输出函数 :编译后代码少, 相对占用内存也小, 从而提高了速度, 同时使用也比较方便。下面分别进行介绍。本回答被提问者和网友采纳
相似回答