我正在尝试构建一个从文件中获取输入的rpn
计算器。
输入看起来像7 2 10 + -
我想把这个输入放在一个char数组中,这是一个动态内存。 如何将数字添加到我的数组中而忽略空格?
我尝试使用fscanf(in,"%c", &input[i])
,但是它存储空格以及处理10和1以及0。
我是C的新手,我对该主题有非常基本的了解,任何帮助都会深深体会:)谢谢
答案 0 :(得分:0)
我认为这个练习不应该是初学者应该开始的;它有很多陷阱需要考虑,例如您的输入必须将数字与运算符分开,有效数字可以是-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;
}