我应该以“%c%d:%d:%d%d”的格式读取stdin的输入,并且开头的允许字符为+ - #
我试过的是
while(1){
ret = scanf(" %c %d:%d:%d %d",&c,&h,&m,&s,&id);
if (ret != 5) break;
if(c=='#') {
log++;
abs_prev=-1;
continue;
}else if(c=='+'){}
else if(c=='-'){}
else{
printf("invalid input.\n");
return 0;
}
}
此代码失败,因为当我输入input + 15:00:00 1enterbutton #enterbutton时,它将\ n字符放入变量c中,该变量c在下面不匹配并返回0
这是我输入的样子
+ 8:00:00 100
+ 8:50:00 105
- 9:30:00 100
- 18:20:00 105
- 19:00:00 100
#
- 17:00:00 100
+ 18:00:00 100
#
#
+ 8:00:00 66
+ 9:00:00 200
+ 10:00:00 100
- 15:00:00 200
- 17:30:00 66
我想用它做什么是当第一个char是+我在树A中存储数据时,如果它 - 我将它存储在树B中,当它#i创建新树
答案 0 :(得分:1)
您最好重新构建代码,因为输入行可以采用不同的格式。以下代码似乎适用于您的目的:
while (1){
if (scanf(" %c", &c) != 1) break;
if (c=='#') {
log++;
abs_prev=-1;
continue;
}
ret = scanf("%d:%d:%d %d",&h,&m,&s,&id);
if (ret != 4) break;
if (c == '+') {}
else if (c == '-') {}
else {
printf("invalid input.\n");
return 0;
}
}
请确保c
的类型不应该是整数,因为它的地址作为scanf
的参数传递。
答案 1 :(得分:1)
使用fgets()
,读取用户输入,然后扫描。
char buf[100];
if (fgets(buf, sizeof buf, stdin) == NULL)
Handle_EOF();
// Note spaces before %d are not needed
int ret = scanf(" %c%d:%d:%d%d", &c, &h, &m, &s, &id);
if (ret == 1) {
if (c != '#')
Handle_InvalidInput();
log++;
abs_prev = -1;
} else if (ret == 5) {
if (c != '+' && c != '-') {
printf("invalid input.\n");
return 0;
}
} else {
Handle_InvalidInput();
}