C语言整型数组的输入有类似字符串gets的输入方式吗?

C语言整型数组的输入有类似字符串gets的输入方式吗?我想不在定义数组的时候就输入固定值,而是可以随机应变。

这样:

#define n 8

int a[n];
for(i=0;i<n;i++)
{
    scanf("%d",a+i);
    getchar();
}


gets

gets函数只用于读入字符或者字符串(非要读整型数也可以,可能会警告甚至error),经常和puts()搭配使用。

使用格式如下

char a[5];
gets(a);
puts(a);

gets函数以回车键为结束标志,并且会把这个回车键读入然后替换成\0,不会遗留在缓冲区内,这点可以弥补scanf第一点不足。

而且gets函数可以正常读入空格,弥补了scanf第二点不足。

当然gets自身也有不足,gets不会检查输入内容,可能会出现缓冲区溢出越界等问题。这时候可以利用fgets函数弥补这点不足。

原文链接:https://blog.csdn.net/x18037177724/article/details/126612008

  • 这篇博客: C语言之字符串的存储和表示(输入和输出)中的 用gets输入字符串 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 因为gets函数是以换行作为终止符的,所以我们可以输入空格或者制表符,这样空格也是字符串的一部分了

    #include<stdio.h>
    #define STR_LEN 80
    int main()
    {
     char str[STR_LEN+1];
     printf("input a sting:");
     gets(str);
     return 0;
    }

    我们输入hellow world
    运行结果
    此外scanf函数无法从输入缓存区读走换行符,什么意思呢?
    看这个代码

    #include<stdio.h>
    #define STR_LEN 80
    int main()
    {
     char str[STR_LEN+1];
     printf("input a sting:");
     scanf("%s",str);
     printf("%s\n",str);
     printf("input a sting:");
     gets(str);
     printf("%s\n",str);
     
     return 0;
    }

    我们输入hellow

    运行结果
    我们会发现本来我们还需要再用gets输入一个字符串,结果自动输入了换行符
    总结就是用scanf输入字符串的时候,他不会读入换行符。因此,换行符还会在输入缓存区中,等待下一次的输入。那如果我们需要用scanf去输入字符串如何解决这个问题呢?
    很简单,在输出的后面加一行getchar();这样就能读走换行符

    #include<stdio.h>
    #define STR_LEN 80
    int main()
    {
     char str[STR_LEN+1];
     printf("input a sting:");
     scanf("%s",str);
     printf("%s\n",str);
     getchar();//读走输入缓冲区中的换行符
     printf("input a sting:");
     gets(str);
     printf("%s\n",str);
     
     return 0;
    }

    我们输入hellow
    在这里插入图片描述
    会提醒让我们进行下一次的输入,这样就解决了scanf后面再有输入的话不影响的问题。

    而gets()函数就会读走输入缓存区的回车符,因此不需要在gets()函数后加入getchar()去消去输入缓存区的回车符。