gpt4 book ai didi

c - 如何在循环中对整数使用 fgets 和 sscanf

转载 作者:太空宇宙 更新时间:2023-11-04 06:36:27 25 4
gpt4 key购买 nike

这里是 C 的初学者。我正在尝试运行一个循环,其中将字符串和 ints 输入到 struct 的各个字段中。当提示输入“姓氏”时,用户可以在没有其他输入的情况下按回车键,循环应该结束。

问题是使用这段代码,循环不会结束(姓氏和名字输入请求在同一行上一起运行)并且薪水的值总是出错(0 或某个大数)

while (employee_num <= 2)
{
printf("Enter last name ");
fgets(employee[employee_num].last_name, sizeof(employee[employee_num].last_name), stdin);

if(strlen(employee[employee_num].last_name) == 0)
break;

printf("Enter first name ");
fgets(employee[employee_num].first_name, sizeof(employee[employee_num].first_name), stdin);

printf("Enter title ");
fgets(employee[employee_num].title, sizeof(employee[employee_num].title), stdin);

printf("Enter salary ");
fgets(strng_buffer, 1, stdin);
sscanf(strng_buffer, "%d", &employee[employee_num].salary);
++employee_num;
getchar();
}

如果我改为尝试此代码,我可以在第一次运行后正确退出循环,但之后无法退出(通过在姓氏部分按 enter - 可能是\n 我似乎无法清除? ):

char strng_buffer[16];
while (employee_num <= 5)
{
printf("Enter last name ");
fgets(strng_buffer, sizeof(strng_buffer), stdin);
sscanf(strng_buffer, "%s", employee[employee_num].last_name);

if(strlen(employee[employee_num].last_name) == 0)
break;

printf("Enter first name ");
fgets(strng_buffer, sizeof(strng_buffer), stdin);
sscanf(strng_buffer, "%s", employee[employee_num].first_name);


printf("Enter title ");
fgets(strng_buffer, sizeof(strng_buffer), stdin);
sscanf(strng_buffer, "%s", employee[employee_num].title);

printf("Enter salary ");
scanf("%d", &employee[employee_num].salary);
++employee_num;
getchar();
}

我很好奇如何使这项工作按预期进行,以及对于此类条目(即使用 sscanf、fgets 等)的最佳实践是什么

提前致谢!

最佳答案

循环在遇到 break 语句时提前中断

if(strlen(strng_buffer) == 0)
break;

未初始化的字符缓冲区 strng_buffer,巧合的是 null 作为第一个字符导致 strlen 返回 0

我相信你可能有意

if(strlen(employee[employee_num].last_name) == 0)
break;

作为循环终止符,这是你的错字,导致循环过早退出。

关于c - 如何在循环中对整数使用 fgets 和 sscanf,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14472004/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com