用gets与puts替换scanf与printf程序运行输出的结果是空的,为什么我不能用%s输出?
#include<stdio.h>
#include<string.h>
int main()
{
char a[100],b[100],c[200];
scanf("%s",a);
int i=0,j=0,k,x;
x=strlen(a);
for(j=0;j<x;j++)
{
for(i=0;i<x-j;i++)
{
if(a[i]>a[i+1])
{
k=a[i];
a[i]=a[i+1];
a[i+1]=k;
}
}
}
for(i=0;i<x;i++)
printf("%c",a[i]);
return 0;
}
1. 字符串输入函数gets()
调用gets()函数实现字符串的输入,其调用形式为:
gets(字符数组);
功能:从终端输入一个字符串(包括空格)赋给从字符数组起始的存储单元中,直到读入一个回车符为止。回车符读入后,不作为字符串的内容,系统将自动用’ ’替换,作为字符串结束的标志。如:
char c[20];
gets(c);
执行上面的语句,如果输入:How are you!<CR>
则将读入的12个字符依次存入到c[0]开始的存储单元中,并在其后自动加入一个字符串结束标志’ ’。
2.字符串输出函数puts()
调用puts()函数实现字符串的输出,其调用形式为:
puts(字符数组);
功能:将字符数组起始地址开始的一个字符串(以’ ’结束的字符序列)输出到终端,并将字符串结束标志’ ’转化成’
’,自动输出一个换行符。如:
char c[ ]= "How
are
you!";
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
", x);
printf("Your float was: %f
", a);
printf("Your character was: %c
", ch);
printf("Your word was: %s
", word);
}