带有空格的字符串输入及反向输出

带有空格的字符串输入及反向输出

gets与scanf的区别:

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

scanf输入

原理

  1. 当输入%d时,输出遇到空格可以自动忽略,此时它只检测数字;
  2. 当输入%c时,输出遇到空格就相当于看见了’\0’,此时自动停止输出(即空格之后的字符不会读出)

解决办法

  • 首先,使用循环进行字符串的输入;
  • 使用“”scanf“”输入项的值判断是否结束循环;
  • 最后同样使用循环,对字符串进行输出。

代码展示

#include<stdio.h>
#include<string.h>
int main()
{
    char ch;
    int i=0,j,k;
    char a[30];
    while((ch=getchar())!='\n')
    {
        a[i]=ch;
        i++;
    }
    for(j=0;j<i;j++)
        printf("%c",a[j]);
    printf("\n");
    for(k=i-1;k>=0;k--)
         printf("%c",a[k]);
    return 0;
}

结果展示

scanf输入结果展示

gets输入

原理

getsgets的区别
gets
  • 函数原型:chargets(charbuffer);
  • 读取:gets(str),str为数组名;
  • 功能:从键盘上输入字符,直至接受到换行符或EOF时停止,并将读取的结果存放在buffer指针所指向的字符数组中;
  • 读取的换行符被转换为null值,做为字符数组的最后一个字符,来结束字符串。
  • 注意:gets函数由于没有指定输入字符大小,所以会无限读取,一旦输入的字符大于数组长度,就会发生内存越界,从而造成程序崩溃或其他数据的错误。
fgets
  • 函数原型:char *fgets(char *s, int n, FILE *stream);
  • 读取:fgets(str, sizeof(str), stdin),其中str为数组首地址,sizeof(str)为数组大小,stdin表示我们从键盘输入数据;
  • 功能:从文件指针stream中读取字符,存到以s为起始地址的空间里,知道读完N-1个字符,或者读完一行;
  • 注意:调用fgets函数时,最多只能读入n-1个字符。读入结束后,系统将自动在最后加’\0’,并以str作为函数值返回。

代码展示

#include<stdio.h>
#include<string.h>
int main()
{
    
   
    unsigned long i,t=0;
    char a[30];
    gets(a);
     t=strlen(a);
    for(i=t;i>0;i--)
        printf("%c",a[i]);
    printf("\n");
   
    return 0;
}

结果展示

gets 输入
     
这里的警告:由于gets函数由于没有指定输入字符大小,会无限读取,可能会发生内存越界,从而造成程序崩溃或其他数据的错误。(简单的来说,就是不安全),但一般情况下,不会出问题。

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值