【发布时间】:2016-09-26 11:36:00
【问题描述】:
这是我学习scanf函数时的程序:
#include <stdio.h>
int main(int argc, char *argv[]) {
int day, year;
char monthName[20];
printf("separate day by /\n");
scanf("%d/%s/%d", &day, monthName, &year);
printf("%d %s %d\n", day, monthName, year);
printf("separate day by blank\n");
scanf("%d%s%d", &day, monthName, &year);
printf("%d %s %d\n", day, monthName, year);
return 0;
}
输入输出如下:
separate day by /
3/Dec/2016
3 Dec/2016 0
separate day by blank
3 Dec 2016
3 Dec 2016
为什么会出现第二个 / 标记和零字符?有什么方法或工具可以分析此类问题吗?
【问题讨论】:
-
第一步是检查
scanf的返回值。如果它不返回 3(在这种情况下),它还没有设置所有变量。 -
%s/-->%19[^/]/ -
@BLUEPIXY 我想你的想法也是正确的,这使得scanf识别/标记。
-
编译时,始终启用所有警告。除其他事项外,
main()的参数未使用,因此签名应为:int main( void )