c - C程序逐行读取文本,每行算术运算
问题描述
我正在尝试制作一个程序,该程序将从文本文件中读取算术运算作为参数,并将每行的结果输出到另一个文本文件。
我的输入文本文件看起来像这样
2+2
3*4
5-5
8/2
这是我现在拥有的代码。
int main (int argc, char **argv) {
char const* const fileName = argv[1];
FILE* file = fopen(fileName, "r");
int bufferLength = 256;
char buffer[bufferLength];
while(fgets(buffer, bufferLength, file)) {
printf("%s\n", buffer);
}
fclose(file);
return 0;
}
我的文本文件中的任何一行都NUMBERarithmeticNUMBER
采用类似的格式,如果我愿意的话:
int sum
sum = number1 + number2; // or any other operation
所以我想在 printf 中读取每一行作为 int 变量并将其输出到另一个文本文件。对我来说问题是 printf - %d 总是输出随机数而不是计算操作。
我只注意到 bufferLength 会影响随机性。它也可以与 fileName 连接。如何正常计算算术运算?
解决方案
看一下sscanf()
orfscanf()
一种将每一行解析为操作数和运算符的变量的方法,例如sscanf(buffer, "%d %c %d", &left, &op, &right)
. 然后执行计算就很简单了。
if (op == '+') result = left + right;
else if (op == '-') result = left - right;
// etc.
或者,如果您更喜欢 if/else 阶梯,请使用 switch 语句。
推荐阅读
- godot - Timer.start() 未按预期调用
- javascript - 如何使用 JavaScript 使所有表和数据表具有焦点?
- sql - 如何在表格中模拟 SQL 分组依据?
- gitlab - Gitlab LFS repo 更改为 NFS
- vim - Vim:处理函数 vundle#config#bundle[2] 时检测到错误。
33_check_bundle_name: - c# - 如何以编程方式停止 HostedService?
- ios - SwiftUI:如何获取设备的宽度?
- spring - 大摇大摆地从属性文件中读取文档
- html - html_attr “href” 在 rvest 中只返回一个结果
- c# - 避免在这种情况下使用 await