作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的程序需要读取一个文件,该文件指示它是否必须将数字入队、出队或完成程序。
我有一个 .txt
文件,如下所示:
E 10
E 2
E 300
D
D
D
E 40
E 50
T
所以,E
说“嘿,你已经将一些东西排入队列”(第一行是 10),D
说“嘿,让队列前面的人出队”,T
说“嘿,让所有人出队,释放内存,仅此而已”
我尝试使用 getc
但它获取每个字符,输出是:
E
1
0
使用fgets
我得到了这条线,这不是我想要的。
我想要的是一种让程序理解 10(十进制)、2(单位)、300(百位)之间差异的方法。我怎样才能得到E
而不是跳转空白,然后得到10
(而不是1
然后0
) ?有没有一个函数可以做到这一点?
观察:带有输入的文件无法更改,必须是这样。
最佳答案
你可以这样做:
char c;
while (fscanf(fp, " %c", &c) == 1) {
switch (c) {
case 'E': {
int n;
if (fscanf(fp, "%d", &n) != 1) {
input error; handle it
}
enqueue(n);
break;
}
case 'D':
dequeue();
break;
case 'T':
destroy_queue();
break;
default:
unknown command; handle error
}
}
if (ferror(fp)) {
input failed; handle error
}
请注意,从技术上讲,这将解析您所描述的文件格式的超集。特别是,它不关心行边界或格式:
E1D
D E
2 E 3E
4 D
D
完全可以接受,并且待遇与
相同E 1
D
D
E 2
E 3
E 4
D
D
fscanf
用于所有输入。 "%c"
跳过可能存在的任何空白,然后读取单个字符。特别是,在第一行之后总是有我们必须跳过的空格:前一行末尾的 \n
。
"%d"
隐式跳过任何空格并读取整数(十进制格式)。
关于C - 在读取文件上的数字时,有没有办法区分单位、十几个或几百?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55666221/
我是一名优秀的程序员,十分优秀!