初学C这里。我试图运行一个循环,其中字符串和ints
被输入到struct
的各个字段中。当提示输入“姓氏”时,用户可以不输入其他输入而按回车,循环应该结束。如何在循环中使用fgets和sscanf进行整数
的问题是,这种代码,循环不结束(姓和名条目请求在同一行上同时运行)和工资的价值永远是错的(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等)最佳实践将是什么样的。
在此先感谢!
谢谢!通过解决这些问题,使我更好地理解使用scanf()时会发生什么。纠正我,如果我错了,但然后我可以写入标准输入数组并读取int值返回到变量使用sscanf()? – Gitarooman
是的,fgets和sscanf会以这种方式工作。请注意,%s格式说明符告诉sscanf复制* word *(例如,零个或多个非空白字符到第一个空白字符)。剩下的fgets'd行会发生什么?这是你的第二篇文章与第一篇文章不同的一种方式。 – Sebivor