因此,我正在从stdin中读取输入,因此必须从中计算算术。例如,可能会给我:
3+4
4+3
7+9
然后将其放入像这样的char数组中:
{3+4;4+3;7+9}
我想创建一个将接受此输入并返回的程序:
{7;7;16}
由于这是C语言中的stdin,所以每个元素都是char类型。我创建了以下代码来处理类似的数组并返回正确的结果:
char *int2string(int i, char *s)
{
sprintf(s, "%d", i);
return s;
}
bufferlen = strlen(buffer);
int result;
for (i = 0; i < bufferlen; i++)
{
if (isNumeric(buffer[i]))
{
value1 = atoi(&buffer[i]);
if (buffer[i + 1] == '+')
{
if (isNumeric(buffer[i + 2]))
{
value2 = atoi(&buffer[i + 2]);
result = value1 + value2;
printf("This is the result: %d\n", result);
int2string(result, &buffer[i]);
for (int k = i + 1; k < bufferlen; k++)
{
buffer[k] = buffer[k + 2];
}
//bufferlen = bufferlen - 2;
}
}
}
}
[不幸的是,我的代码仅适用于由一个字符组成的输入,并且返回的值仅为一个字符。如果要运行此命令:
34+22
我的代码返回以下内容:
This is the result: 26
322;
我相信这是因为我的代码一次只能读取一个字符,并且无法区分一位数字和包含一个以上数字的数字。有什么办法可以解决这个问题?
您可以使用sscanf
来获取运算符和任意数字。您可以按如下方式使用它:
int sum;
sscanf(buffer, "%d", &sum);
int number;
char op;
while(sscanf(buffer, "%c%d", &op, &number) == 2) // while you can scan both operation and number
{
if (op == '+')
sum += number;
else if (op == '-')
sum -= number;
...
}