11.2字符串输入

11.2字符串输入

如果想把一个字符串读入程序,首先必须预留储存该字符串的空间,然后用输入函数获取该字符串

11.2.1分配空间

程序不会在读取字符串时计算它的长度再分配空间,所以要先分配足够的空间

char *name

scanf("%s",name)

scanf要把信息拷贝至参数指定的地方,但是此时该参数是个未初始化的指针,name可能会指向任何地方

解决办法是在声明时指明数组的大小

char name[81]

现在name是一个已经分配块(81字节)的地址

11.2.2gets函数

在读取字符串时,scanf和转换说明%s只能读取一个单词,可是在程序中经常要读取一整行输入

gets函数就用于处理这种情况,能读取整行输入,知道遇到换行符,然后丢弃换行符,读取其他字符,并且在这些字符的末尾添加一个空字符使其称为一个c字符串

#include <stdio.h> 
#define STLEN 81int main(void)//声明定义数组空间
{
char words[STLEN]; //创建数组
puts("Enter a string, please.");
gets(words); // 典型用法
printf("Your string twice:\n");
printf("%s\n", words);
puts(words);
puts("Done.");
return 0;
}

11.2.3gets的替代品

1.fgets函数

fgets函数通过2个参数限制读入的字符来解决溢出的问题

fgets函数的第二个参数指明了读入字符的最大数量

如果fgets读到一个换行符,那会储存在字符串中

fgets的第三个参数指明要读入的文件,读入从键盘输入的数据,则以stdin作为参数

2.gets_s

gets_s只从标准输入中读取数据,所以不需要第三个参数

读到换行符,会丢弃它而不是储存它

11.2.4scanf函数

scanf和gets或fgets的区别是他们如何确定字符串的末尾

作业

#define a 10

void getnchar(char b[], int n);//创建储存函数和储存的数组

int main(int argc, char* argv[])
{
    char input[a];

    printf("Please enter %d characters:\n", a - 1);//主要函数执行打印输入输出
    getnchar(input, a);
    printf("Result:\n");
    puts(input);
    printf("Done.\n");

    return 0;
}

void getnchar(char b[], int n)
{
    int i = 0;

    while (i < n - 1)
    {
        b[i++] = getchar();//依次储存
    }
    b[i] = '\0';

    return;
}
#define a 10

void getnchar(char b[], int n);

int main(int argc, char* argv[])
{
    char input[a];

    printf("Please enter %d characters:\n", a - 1);
    getnchar(input, a);
    printf("Result:\n");
    puts(input);
    printf("Done.\n");

    return 0;
}

void getnchar(char b[], int n)
{
    int i = -1;

    while (++i < n - 1)
    {
        b[i] = getchar();
        if (isspace(b[i]))
        {
            break;
        }
    }
    b[i] = '\0';

    return;
}

本文作者:New灬撕裂の天堂

本文链接:https://www.cnblogs.com/newbroken/p/15871832.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

本文作者:New灬撕裂の天堂

本文链接:https://www.cnblogs.com/newbroken/p/15871832.html

posted @   New灬撕裂の天堂  阅读(42)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
💬
评论
📌
收藏
💗
关注
👍
推荐
🚀
回顶
收起
  1. 1 404 not found REOL
404 not found - REOL
00:00 / 00:00
An audio error has occurred.
💬
评论
📌
收藏
💗
关注
👍
推荐
🚀
回顶
收起