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
因为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()去消去输入缓存区的回车符。