c - C程序将字符指令从文本文件转换为字符串指令
问题描述
我的输入文本文件目前看起来像这样
a 5
a 10
s 8
r
结果是= 49 (5+10-8*2)
但它应该看起来像这样:
ADD 5
ADD 10
SUB 10
SQR
我的问题是,如何将字符指令转换为字符串指令?
我的代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
int main(int argc, char **argv)
{
FILE *fp;
char buff[255];
char numBuff[10];
int a;
int val = 0;
int len;
fp = fopen(argv[1], "r");
while(fgets(buff, 255, fp) != NULL){
len = strlen(buff);
strncpy (numBuff, buff+2, len-2);
numBuff[len-2] = '\0';
a = atoi(numBuff);
// Char Operations
if(buff[0] == 's'){ //Subtract
val -= a;
}else if(buff[0]=='a'){ //Add
val += a;
}else if(buff[0]=='m'){ //Multiplicate
val *= a;
}else if(buff[0]=='d'){ // Divide
val /= a;
}else if(buff[0]=='r'){ //Power*2
val = pow(val,2);
}
}
printf("%d \n",val);
return 0;
}
在此先感谢并抱歉格式错误,这是我在这里的第一个问题!
解决方案
strcmp
是解决方案。但是你必须比较正确的事情。
首先获取文件中写入的操作:
strcpy(operation, buff, 3);
然后你可以在strcmp中使用它。更好的是,使用 strncmp:
if(strncmp(operation, "ADD", 3) == 0)
{
// Do things
}
所以在你的代码中:
int main(int argc, char **argv)
{
FILE *fp;
char buff[255];
char numBuff[10];
char operation[3];
int a;
int val = 0;
int len;
fp = fopen(argv[1], "r");
while(fgets(buff, 255, fp) != NULL){
len = strlen(buff);
strncpy (numBuff, buff+2, len-2);
numBuff[len-2] = '\0';
// Get the operation
strcpy(operation, buff, 3);
a = atoi(numBuff);
// Char Operations
if(strncmp(operation, "SUB", 3) == 0){ //Subtract
val -= a;
}else if(strncmp(operation, "ADD", 3) == 0){ //Add
val += a;
}else if(strncmp(operation, "MUL", 3) == 0){ //Multiplicate
val *= a;
}else if(strncmp(operation, "DIV", 3) == 0){ // Divide
val /= a;
}else if(strncmp(operation, "SQR", 3) == 0){ //Power*2
val = pow(val,2);
}
}
printf("%d \n",val);
return 0;
}
推荐阅读
- java - Webrtc Android 原生 CertPathValidatorException
- java - 洪水填充不断抛出 StackOverflowError 错误
- spring - Spring Boot 初始化未从 hibernate.properties 读取
- c++ - 请解释此特定代码中的分段错误
- swift4.2 - 如何检查 NSAttributed 字符串的两个 NSAttributedString.key 是否相等?
- asp.net-identity - 将我的注册页面中的第三方登录与 IdentityServer4 和 Angular 6 集成 - “在存储中未找到匹配状态”
- ios - 无法为 TableView 的自定义单元格设置任何属性。此外,当我在 cellsForRowAt 函数中填充表时,它返回空表
- java - 如何在固定的时间间隔内锁定数据库行?
- python-3.x - selenium 弹出框交互
- syntax - OCaml 中的单引号 'a 和 a' 有什么区别?