c - gets 打破了 C 上的循环

标签 c gets

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

它应该保存 39 个字符,但在我输入第一个字符后,它返回到上一个循环。 (我有一个在主屏幕上显示内容时执行的操作)

为什么它没有按预期工作?

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

最佳答案

在您提供的链接中,在 gets 之前有一个 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,而是可以使用 strncpy (使用之前,请仔细阅读提供的链接)。

关于c - gets 打破了 C 上的循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21043750/

相关文章:

c - c中的获取和malloc

c - 如果 gets() 可以接受 char 数组,为什么它不接受 char 指针参数?

c - 无法使用从 fgets 输入的字符串搜索字符

c - 输入后 Char 指针(字符串)数组崩溃?

c++ - Visual Studio 将 "filter"编译为 C,将 "filters"组编译为 C++

c - 使用条件变量进行异步执行。

c - 如果传递了冲突的编译器标志,GCC 会如何表现?

c - 如何将 C 语言转换为汇编语言,以便在 ATmega32U4(连接到 Teensy 2.0)上运行的程序

gets() 函数中的 CR 字符

c - 将文件列表保存到数组或其他 C