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;
}



 

0.0分

2 人评分

看不懂代码?想转换其他语言的代码? 或者想问其他问题? 试试问问AI编程助手,随时响应你的问题:

编程语言转换万能编程问答  

代码解释器

代码纠错

SQL生成与解释

  评论区