我想输入图书信息,其中一个信息是图书出版的月份和年份。
该程序假设使用以下格式阅读:02-2012
表明02
是月份,2012
是年份。
printf("Enter month and year book publish:\n");
scanf("%d[^-]%d",&book[i].month,&book[i].year);
我尝试过这样做,但它不起作用。
答案 0 :(得分:4)
诀窍是将输入转换为您想要的格式,这可以通过scanf强制输入格式来完成。
scanf("%d-%d", &book[i].month, &book[i].year);
两个%d之间的短划线会吞下去' - '由用户输入。
答案 1 :(得分:0)
可能的解决方案:
char temp;
scanf("%d%c%d", &book[i].month,&temp,&book[i].year);
如果temp包含破折号,您可以稍后验证输入检查。
答案 2 :(得分:0)
可能你正在寻找这个,
scanf("%d-%d,&book[i].month,&book[i].year);
这将忽略输入中的-
。
答案 3 :(得分:0)
使用"%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] == '\0') Success();