2017-04-01 62 views
0

我试图建立一个rpn计算器,它需要从文件输入。输入的数字转换成char数组从文件

输入看起来像7 2 10 + -

我想把这个输入一个字符数组是动态内存。 如何将数字添加到我的数组忽略空格?

我试着用fscanf(in,"%c", &input[i]),但存储空格以及治疗10和1和0

我新的C和我的主题非常基本的知识的任何帮助将十分赞赏:)谢谢

+0

'10'和''+''是两种不同的数据类型。你不能将它们存储在一个数组中,除非你至少创建了两个数据字段(数字和运算符)的'union'。 – DyZ

回答

0

我认为,这项工作是不是一个初学者应该开始;它有很多缺陷需要考虑,例如一个你的输入必须从运营商分离的数字,是一个有效的数字可能是-10甚至+10为好,即应对未知的令牌的数量是相当难在开始,依此类推。

无论如何,请参阅下面的代码,至少解决了文件到一个字符串数组中读出的话题,由此假设多达50代币与每个至多99个字符的长度。其他有用的功能可能是isdigitatoi;希望它有一点帮助。

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; 
} 
+0

有什么其他方法可以实现strdup的功能吗?因为使用-std = c99进行编译时,strdup会引发警告。 – akzh

+0

@ akzh--'strdup()不是C标准库函数,但它是POSIX。您可能需要使用功能测试宏来启用它,加入这个作为源文件的第一行:'#定义_POSIX_C_SOURCE 200809L'。如果'strdup()'在您的系统上不可用,则不难实现,您可以在线找到很多示例。 –