Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
获取并中断C上的循环_C_Gets - Fatal编程技术网

获取并中断C上的循环

获取并中断C上的循环,c,gets,C,Gets,我正在尝试使用get来存储名称/小短语 它本来应该保存39个字符,但在我输入第一个字符后,它会返回到上一个周期。(我在主屏幕上显示内容时有一个任务) 为什么它不能像想象的那样工作 char nome[40]; printf("\nNome do Equipamento: "); gets(nome); strcpy(eq[n].nomeEquipamento, nome); 在您提供的链接中,在获取之前有一个scanf调用 printf("\nCodigo do Equipamento: ")

我正在尝试使用get来存储名称/小短语

它本来应该保存39个字符,但在我输入第一个字符后,它会返回到上一个周期。(我在主屏幕上显示内容时有一个任务)

为什么它不能像想象的那样工作

char nome[40];
printf("\nNome do Equipamento: ");
gets(nome);
strcpy(eq[n].nomeEquipamento, nome);

在您提供的链接中,在
获取之前有一个
scanf
调用

printf("\nCodigo do Equipamento: ");    
scanf("%d",&codigo);     
eq[n].codDipositivo=codigo;
printf("\nNome do Equipamento: ");              
gets(nome);
按Enter键后,
scanf
调用会留下
\n
字符。此
\n
字符由
gets
读取,这就是您面临此问题的原因。
要使用此
\n
,请在
scanf
之后使用
getchar
开始

 printf("\nCodigo do Equipamento: ");    
 scanf("%d",&codigo);
 getchar();      // To comsume '\n'      
 eq[n].codDipositivo=codigo;
 printf("\nNome do Equipamento: ");              
 gets(nome);  
现在关于
获取
;很高兴看到邪恶的
已经成为历史。改用
fgets


也不要使用strcpy,相反,你可以使用(在使用它之前,请仔细阅读提供的链接)。

首先要把必须的内容去掉:
get
是邪恶的。甚至不是什么邪恶的事。从“无论在什么情况下,永远不要使用它”的意义上来说,它是邪恶的。它本质上是一个可移动的安全漏洞。现在,这已经不存在了-请给我们看主函数的其余部分,我看不出有什么区别。C语言中不再有一个名为gets的函数,它在2年前被删除了。@Pedro请发布完整的代码。谢谢。我两个都试过了,但还是有同样的问题。你说的未初始化变量是什么意思@AlterMann@Cubic介意看一下整个事情吗?您可以通过按:1 2 1 2 X来复制相同的内容非常感谢!我添加了fflush(stdin);在scanf和fgets之前,它现在可以工作了@佩德罗;不要使用
fflush(stdin)
。如果您不在MS-DOS上,它将调用umdefined行为。在建议使用它之前,您应该始终提及
strncpy
中的缺陷。否则,您只能将一个漏洞切换到另一个。@user694733;对。添加了一个链接。@user694733真的,标准C字符串被破坏了。我不确定这是否是一种常见的做法,但在一个新项目中我要做的第一件事(如果我能够调用的话)是用一个合适的字符串库替换所有c字符串实例。