fgets()和scanf(“%quot;[^\n]”)都被跳过
我正在做我的c项目,刚刚开始。我需要从用户输入中获取“名称” fgets()在主函数内部工作正常,但在主函数外部使用时跳过。我发现了许多相关问题,因此我阅读了所有答案,但无法解决我的问题 在阅读了一些答案之后,我尝试使用“fflush(stdin)”,scanf([%^\n]”) 但是没有爱fgets()和scanf(“%quot;[^\n]”)都被跳过,c,C,我正在做我的c项目,刚刚开始。我需要从用户输入中获取“名称” fgets()在主函数内部工作正常,但在主函数外部使用时跳过。我发现了许多相关问题,因此我阅读了所有答案,但无法解决我的问题 在阅读了一些答案之后,我尝试使用“fflush(stdin)”,scanf([%^\n]”) 但是没有爱 void newacc() { struct tenant new; printf("Enter Name:"); fgets(new.
void newacc()
{
struct tenant new;
printf("Enter Name:");
fgets(new.name,20,stdin);
printf("\nEnter Phone number:\n");
scanf("%d",&new.ph);
printf("Enter Rental Date (DD-MM-YYYY):\n");
scanf("%d%d%d",&new.td.dd,&new.td.mm,&new.td.yy);
}
试试这个
#include <stdio.h>
void newacc()
{
struct tenant per;
printf("Enter Name:");
gets_s(per.name,20);
printf("\nEnter Phone number:\n");
scanf("%d",&per.ph);
printf("Enter Rental Date (DD-MM-YYYY):\n");
scanf("%d%d%d",&per.td.dd,&per.td.mm,&per.td.yy);
}
#包括
void newacc()
{
每个租户的结构;
printf(“输入名称:”);
获取_s(根据名称,20);
printf(“\n输入电话号码:\n”);
scanf(“%d”、&per.ph);
printf(“输入租赁日期(DD-MM-YYYY):\n”);
scanf(“%d%d%d”、&per.td.dd、&per.td.mm、&per.td.yy);
}
自从<代码>新< /Cord>是C++的关键字,这里是一个坏名字
请尽量不要同时使用
scanf
和fgets
我不熟悉scanf,但您是第二个scanf(“%d%d%d”)似乎容易出错。你怎么知道跳过了什么
这是一个希望在DD、MM和YYYY之间留有空格(“%d%d%d”)的版本,这样每个数字就可以清楚地分开。您收集输入的方式还有其他问题,但我看不到任何遗漏
#include <stdio.h>
void newacc()
{
char name[20];
int phone;
int day;
int month;
int year;
printf("Enter Name: ");
fgets(name,20,stdin);
printf("Enter Phone number: ");
scanf("%d",&phone);
printf("Enter Rental Date (DD MM YYYY):\n");
scanf("%d %d %d",&day, &month, &year);
printf("%s %d %02d-%02d-%04d\n", name, phone, day, month, year);
}
int main(void)
{
newacc();
return (0);
}
#包括
void newacc()
{
字符名[20];
国际电话;
国际日;
整月;
国际年;
printf(“输入名称:”);
fgets(名称,20,标准DIN);
printf(“输入电话号码:”);
scanf(“%d”和电话);
printf(“输入租赁日期(DD-MM-YYYY):\n”);
scanf(“%d%d%d”、&day、&month、&year);
printf(“%s%d%02d-%02d-%04d\n”,姓名、电话、日期、月份、年份);
}
内部主(空)
{
newacc();
返回(0);
}
在上一次输入后,输入缓冲区中可能会留下一条离群的换行符?没有密码很难说。千万不要把scanf
和fgets
混在一起。如果必须使用scanf
,请使用scanf
读取所有输入-不要尝试将fgets
和getc
/getchar
混合在一起。如果你试着把它们混在一起,你会有换行符和其他空格的问题,直到你的生活结束。(如果您坚持使用scanf
,您仍然必须小心%c
和%[…]
,因为它们处理空白的方式不同于scanf
的其他输入指令。)还请注意,c规范明确提到在仅输入流上调用fflush
(如stdin
)作为未定义的行为。某些系统将其添加为不可移植的扩展,从不使用它。您如何知道它“被跳过”所有的调用都是什么意思?检查所有调用的返回状态,代码< FSID和#include
而不是#include
@hrishavdhawajpurkayasta您使用的不正确。它需要传递一个size
参数。它在许多th的实现中也不存在e标准C库,请改用fgets
。