我假设输入图书信息,其中一个信息是图书出版的月份和年份。
程序假定以以下格式读取它:02-2012
,其中02
为月份,2012
为年份。
printf("Enter month and year book publish:n");
scanf("%d[^-]%d",&book[i].month,&book[i].year);
我试过这样做,但它不工作
技巧是将输入转换为您想要的格式,这可以通过scanf强制输入格式来完成。
scanf("%d-%d", &book[i].month, &book[i].year);
两个%d之间的破折号将吞噬用户输入的'-'。
可能的解决方案:
char temp;
scanf("%d%c%d", &book[i].month,&temp,&book[i].year);
您可以稍后验证输入,检查temp是否包含破折号。
也许你正在寻找这个,
scanf("%d-%d,&book[i].month,&book[i].year);
这会忽略输入中的-
。
使用"%n"
检测完整解析
printf("Enter month and year book publish:n");
int n = 0;
scanf("%d-%d%n", &book[i].month, &book[i].year, &n);
if (n) Success();
甚至更好,使用fgets()
而不是scanf()
char buf[100];
fgets(buf, sizeof buf, stdin);
int n = 0;
sscanf(buf, "%d-%d %n", &book[i].month, &book[i].year, &n);
// Also detects that trailing junk after the 2nd number does not exist.
if (n && buf[n] == ' ') Success();