我试图建立一个rpn
计算器,它需要从文件输入。输入的数字转换成char数组从文件
输入看起来像7 2 10 + -
我想把这个输入一个字符数组是动态内存。 如何将数字添加到我的数组忽略空格?
我试着用fscanf(in,"%c", &input[i])
,但存储空格以及治疗10和1和0
我新的C和我的主题非常基本的知识的任何帮助将十分赞赏:)谢谢
我试图建立一个rpn
计算器,它需要从文件输入。输入的数字转换成char数组从文件
输入看起来像7 2 10 + -
我想把这个输入一个字符数组是动态内存。 如何将数字添加到我的数组忽略空格?
我试着用fscanf(in,"%c", &input[i])
,但存储空格以及治疗10和1和0
我新的C和我的主题非常基本的知识的任何帮助将十分赞赏:)谢谢
我认为,这项工作是不是一个初学者应该开始;它有很多缺陷需要考虑,例如一个你的输入必须从运营商分离的数字,是一个有效的数字可能是-10
甚至+10
为好,即应对未知的令牌的数量是相当难在开始,依此类推。
无论如何,请参阅下面的代码,至少解决了文件到一个字符串数组中读出的话题,由此假设多达50代币与每个至多99个字符的长度。其他有用的功能可能是isdigit
和atoi
;希望它有一点帮助。
int main(int argc, char* argv[]) {
FILE *f = fopen("data.txt", "rt");
if (!f)
return 0;
char* tokens[50];
int nrOfTokens = 0;
char token[100];
// fscanf(f, "%s", token) tries to read in the next token (separated by white space);
// it returns 1 if exactly one token has been read in, otherwise 0
while (nrOfTokens < 50 && fscanf(f, "%s", token)==1) {
tokens[nrOfTokens] = strdup(token); // strdup copies the content of `token` and allocates enough memory for this copy.
nrOfTokens++;
}
for (int i=0; i<nrOfTokens; i++) {
printf("token: %s\n",tokens[i]);
}
return 0;
}
有什么其他方法可以实现strdup的功能吗?因为使用-std = c99进行编译时,strdup会引发警告。 – akzh
@ akzh--'strdup()不是C标准库函数,但它是POSIX。您可能需要使用功能测试宏来启用它,加入这个作为源文件的第一行:'#定义_POSIX_C_SOURCE 200809L'。如果'strdup()'在您的系统上不可用,则不难实现,您可以在线找到很多示例。 –
'10'和''+''是两种不同的数据类型。你不能将它们存储在一个数组中,除非你至少创建了两个数据字段(数字和运算符)的'union'。 – DyZ