scanf()和gets()都可以用来从标准输入接收一个字符串,区别如下:


get()函数:

1)gets()从标准输入设备读取字符串,以回车结束读取,使用'\0'结尾,回车符'\n'被舍弃没有遗留在缓冲区。

2)可以用来输入带空格的字符串。

3)可以无限读取,不会判断上限,因此使用gets不安全,可能会造成溢出。


scanf()函数:

1)scanf()以 空格 或 回车符 结束读取,空格 或 回车符 会遗留在缓冲区。

2)不能直接输入带空格的字符串。

注意:scanf()函数如何才能输入带空格的字符串。

    scanf("%[^\n]", a);  //%[]输入字符集, [^\n] 表示除了'\n'之外的字符都接收,即可以接收空格,这个可以用来输入带空格的字符串。(《C和指针》P310)


代码如下,仅供参考。

#include <stdio.h>
#include <string.h>

#define MAX 256

int main()
{
    char str[MAX];

    //1 用gets函数接收从标准输入中输入的字符串
    //gets(str);
    //2 用scanf接收一个字符串,下列方式可以接收空格
    scanf("%[^\n]", str);

    int len = strlen(str);
    int i;
    int num = 0;
    int abc = 0;
    int space = 0;
    int other = 0;
    for (i = 0; i < len; i++)
    {
        if (str[i] <= '9' && str[i] >= '0')
            num++;
        else if (str[i] <= 'z' && str[i] >= 'a')
            abc++;
        else if (str[i] == ' ')
            space++;
        else
            other++;
    }

    printf("%d %d %d %d\n", abc, num, space, other);

    return 0;
}



点赞(2)
 

0.0分

2 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论