你应该不介意再帮我几个问题噶?1.在文本文件Comp.txt里有需要计算结果的整数算式,每个算式占一行且文件中有多个算式
1个回答

第 2 题可视为在第 1 题的基础上,考虑了异常情况的处理,因此可以合并为一个问题.也就是说,第 2 题的代码可以直接作为第 1 题的答案.代码如下:

#include

#include

#include

#include

#define N 512

int readInt(char** pstr, int* pa, char* des)

{

char* str = *pstr;

int flagOver = 0;

char stra[N];

while (*str != 0) {

switch(*str) {

case ' ':

if (flagOver) {

sprintf(stra, "%d ", *pa);

strcat(des, stra);

*pstr = str;

return 0;

} else {

str++;

}

break;

case 'n':

case '=':

if (flagOver) {

sprintf(stra, "%d ", *pa);

strcat(des, stra);

*pstr = str;

return 0;

} else {

return 2;

}

break;

default:

if (!isdigit(*str)) {

if (*str != '-' || flagOver != 0)

return 1;

} else if (flagOver == 0) {

sscanf(str, "%d", pa);

flagOver = 1;

}

str++;

break;

}

}

return 2;

}

int readOp(char** pstr, char* pop, char* des)

{

char* str = *pstr;

char op[3];

while (*str != 0) {

switch(*str) {

case ' ':

str++;

break;

case 'n':

case '=':

return 2;

break;

case '+':

case '-':

sscanf(str, "%c", pop);

sprintf(op, "%c ", *pop);

strcat(des, op);

str++;

*pstr = str;

return 0;

break;

default:

return 1;

break;

}

}

return 2;

}

int calcOneLine(char* str, char* des, int* piLine)

{

int a, b;

char op;

int flag;

printf("Line %03d:t", ++(*piLine));

flag = readInt(&str, &a, des);

if (flag == 1) {

printf("Error!n");

return 0;

}

if (flag == 2) {

printf("n");

return 0;

}

while (str[0] != 0) {

flag = readOp(&str, &op, des);

if (flag == 1) {

printf("Error!n");

return 0;

}

if (flag == 2) {

printf("%s= %dn", des, a);

break;

}

flag = readInt(&str, &b, des);

if (flag) {

printf("Error!n");

return 0;

}

if (op == '+')

a = a+b;

else

a = a-b;

}

return 0;

}

int main()

{

char filename[] = "Comp.txt";

FILE *fp = NULL;

char buf[N], des[N];

int iLine = 0;

fp = fopen(filename, "r");

if (fp == NULL) {

printf("Error: Cannot open file %s.n", filename);

exit(1);

}

while ( !feof(fp) ) {

des[0] = 0;

buf[0] = 0;

fgets(buf, N-1, fp);

if (buf[0] != 0)

calcOneLine(buf, des, &iLine);

}

fclose(fp);

return 0;

}

若测试文件 Comp.txt 内容如下:

123 + 556

300 - 215

1001 - 18976

9123 + 5156

9123 + 5156 - 3

9123 + 5156 - 3 =

9123+ m5156 - 3

9123 * 5156 - 3

则运行程序,输出如下:

Line 001: 123 + 556 = 679

Line 002: 300 - 215 = 85

Line 003: 1001 - 18976 = -17975

Line 004: 9123 + 5156 = 14279

Line 005:

Line 006: 9123 + 5156 - 3 = 14276

Line 007: 9123 + 5156 - 3 = 14276

Line 008: Error!

Line 009: Error!

Line 010:

第 3 题程序代码如下:

#include

#include

#include

#define CALLOC(ARRAY, NUM, TYPE) {

ARRAY = (TYPE*) calloc(NUM, sizeof(TYPE));

if (ARRAY == NULL) {

printf("File: %s, Line: %d: ", __FILE__, __LINE__);

printf("Allocating memory failed.n");

exit(0);

} else {

memset(ARRAY, 0, NUM*sizeof(TYPE));

}

}

int main()

{

int n;

int** a=NULL;

int i, j, k, max;

int dir;

do {

printf("Please input n: ");

scanf("%d", &n);

} while (n