C语言中 gets 函数输入字符串,不能放在循环中 重复输入是怎么回事,程序如下

作者&投稿:化霞 (若有异议请与网页底部的电邮联系)
关于C语言里的gets()问题,为什么名字输入被跳过?~

C语言里的gets()函数功能是从输入缓存中读取多个字符,遇到回车符时,结束输入。
当使用gets()函数之前有过数据输入,并且,操作者输入了回车确认,这个回车符没有被清理,被保存在输入缓存中时,gets()会读到这个字符,结束读字符操作。因此,从用户表面上看,gets()没有起作用,跳过了。
解决办法:
方法一、在gets()前加fflush(stdin); //强行清除缓存中的数据(windows下可行)
方法二、根据程序代码,确定前面是否有输入语句,如果有,则增加一个getchar()命令,然后再调用 gets()命令。
方法三、检查输入结果,如果得到的字符串是空串,则继续读入,如:
char str[100]={0};
do {
gets(str);
} while( !str[0] );

gets,scanf都会在末尾加上\0的,要不然字符串就没法结束了;
他们的不同在于,scanf碰到缓冲区里面的空字符(空格,tab,回车,换行就会截断并添加\0),而gets是要等回车才截断字符串并添加\0的;
比如用输入字符串:abcdefg hijk回车;
用scanf的话,会得到abcdefg,而gets则是:abcdefg hijk。
C语言是一门通用计算机编程语言,应用广泛。C语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。
尽管C语言提供了许多低级处理的功能,但仍然保持着良好跨平台的特性,以一个标准规格写出的C语言程序可在许多电脑平台上进行编译,甚至包含一些嵌入式处理器(单片机或称MCU)以及超级电脑等作业平台。
二十世纪八十年代,为了避免各开发厂商用的C语言语法产生差异,由美国国家标准局为C语言制定了一套完整的美国国家标准语法,称为ANSI C,作为C语言最初的标准。目前2011年12月8日,国际标准化组织(ISO)和国际电工委员会(IEC)发布的C11标准是C语言的第三个官方标准,也是C语言的最新标准,该标准更好的支持了汉字函数名和汉字标识符,一定程度上实现了汉字编程。

#include<stdio.h>
#include<string.h>
int main()
{
char str[5];
while(1)
{
printf("[gets]str=");
gets(str);
printf("gets:str:%s,length:%d\n",str,strlen(str));
printf("scanf,str=");
scanf("%s",str);
getchar();
printf("scanf:str=%s\n",str,strlen(str));
if(str[0]=='f') break;
}
return 0;
}
scanf输入后那个回车被gets(str)接收了,所以下次遇到gets就不再等待你输入,可以用getchar()把scanf输入后的回车接收就好了。 我运行过的,给最佳答案哦!

每次使用了输入输出函数后,可以直接使用

fflush(stdin)//清空缓冲区

这样就可以避免上次的操作影响下次的输入输出。



if(str[0]=='f') break;
跳出循环了吧?!


和林格尔县14795057190: c语言中用gets读入一个字符串,函数功能类似word的首行缩进2字符,puts输出??? -
端制施太: 可以在puts前 先输出两个字符宽度.也可以在gets读入的时候 偏移两个字符宽度读取,前面两个放空格. 比如这样:char s[500] = " ";//两个空格.gets(s+2);//偏移两个空格 puts(s);//带空格输出.

和林格尔县14795057190: c语言:gets可以连续输入字符串吗?怎么输入? -
端制施太: gets是以回车作为分隔符,即每一次gets遇到回车就不读了,如果想连续读入输出,可使用循环操作 如while(gets(str))

和林格尔县14795057190: 在C语言中,用gets输入了一个字符串,怎么用数组它? -
端制施太: #include "stdio.h" void main() {char s[50];int i = 0;gets(s);puts(s);while(s[i]!='\0'){printf("%d --> %c\n",i,s[i]);i++;}system("pause"); } 你可以看看 这样直接能存放到数组中 其中'\0'是结束标识,也就是空

和林格尔县14795057190: C语言如何在调用函数中输入二维字符数组char c[][] 用gets或 scanf -
端制施太: gets(c[0])输入第一行的字符串 gets(c[1])输入第二行的字符串,以此类推. scanf("%s",c[0])输入一行的字符串,以此类推.

和林格尔县14795057190: c语言中,如果用gets输入一段字符串,如何用数组形式输出? -
端制施太: 就按普通字符数组那样处理就好了.1 2 3 4for(i = 0; i < strlen(str); i++) { printf("%c", str[i]); } strlen函数计算str字符串的长度,不包括最后的\0,在string.h头文件中.希望对你有所帮助

和林格尔县14795057190: C语言中,,,输入字符串用gets和用循环结构然后加scanf输入,,有什么区别,好像会出现一个不能识别空格 -
端制施太: 代表输入结束 gets()是用来输入字符串的,应该也是以回车代表输入结束 scanf()是什么都可以输入,scanf()是以回车代表输入结束 scanf()中会用到空格 是用作分隔符的 因为scanf()可以输入多个变量,如 canf("%d%d",&a,&b);//表示输入两个整形的数分别赋给变量a、b 在输入另个数时用空格间隔开 但如果canf("%d,%d",&a,&b);//如果两个%d中间用逗号间隔,那么输入时也必须用逗号作为两个数间隔.希望你可以理解 另外,虚机团上产品团购,超级便宜

和林格尔县14795057190: c语言中,输入一个字符串使用scanf(”%s”)和gets()有什么区别 -
端制施太: 其实用scanf("%s",);和gets();本质上没有什么区别,都是将字符数据输入到制定的内存单元中. 假设定义有字符数组(C语言把字符串按字符数组处理)str[30],那么我们向里面输入字符就可以为: scanf("%s",str); gets(str); 他们都...

和林格尔县14795057190: 采用gets输入字符串并保存在字符数组s1中的C语句为 - ------------------? -
端制施太: #include<stdio.h> #include<string.h> #define N 24 main() { 制int c;char s1[2*N],s2[N];printf("请输入字符串21135261s1:");gets(s1);printf("请输入字符串s2:");gets(s2);puts(s1);puts(s2);printf("连接后的字符串为:%s\n",...

和林格尔县14795057190: c语言,用gets输入输入一个字符串,中间有一个回车符,怎么输入? -
端制施太: //自己写一个比gets 函数更加安全的函数 void MyGets(char*str) { char ch; int i=0; int length=sizeof(str); if(length>1) { ch=getchar(); if(ch=='#') { str[i]=ch; i++; } while((ch!='#'&&(i<length))//最后一个字符留给\0 #为输入的结束//符 随你不不输入\n { str[i]=ch; ch=getchar(); i++; } str[i]='\0'; } }

和林格尔县14795057190: 从键盘怎么读入一个字符串,c语言中用gets -
端制施太: #include <stdio.h> int main(void) {char str[100];printf("请输入一个字符串:\n");gets(str);printf("你输入了: %s",str); }

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网