笔者的应用场景:将图像指定区域的像素值按其空间位置写到 txt 文件中。
int hang = 4; // 矩阵行数 int lie = 8; // 矩阵列数 // 先在txt文件中构造一个空矩阵,然后向该矩阵中指定行列写入个位数 int main10() { FILE *filp = fopen("cc.txt", "w+"); for (int i = 0; i < hang; i++) { fseek(filp, lie, SEEK_END); fprintf(filp, "\n"); // 换行符占两个字节宽度 } for (int i = 1; i <= hang; i++) { fseek(filp, (i - 1)*(lie + 2), SEEK_SET); for (int j = 1; j <= lie; j++) { fprintf(filp, "%d", i); } } fclose(filp); while (1); return 0; } // 对上面程序的扩展,在矩阵中指定行列写入最高只有3位数的数据,两数之间以空格符间隔开。 int main11() { FILE *filp = fopen("cc.txt", "w+"); for (int i = 0; i < hang; i++) { fseek(filp, 4 * lie, SEEK_END); // 每个数值 fprintf(filp, "\n"); // 换行符占两个字节宽度 } for (int i = 1; i <= hang; i++) { fseek(filp, (i - 1)*(4 * lie + 2) + 1, SEEK_SET); // +1 表示每个数的空格放在数字前面,否则空格会自动被放在数字后面的。 for (int j = 1; j <= lie; j++) { if ((i + j) % 2) fprintf(filp, "%3d", rand()%200); else // 模拟跳过某些特定位置 fseek(filp, 3, SEEK_CUR); if (j < lie) fseek(filp, 1, SEEK_CUR); // 跳过空格 } } fclose(filp); while (1); return 0; } // 对上面程序的扩展,矩阵的第一行用于表示列标号,矩阵的第一列用于表示行标号 int main() { FILE *filp = fopen("cc.txt", "w+"); fprintf(filp, " "); // 5个空格 for (int j = 0; j < lie; j++) { fprintf(filp, " %3d", j); } fprintf(filp, "\n"); for (int i = 0; i < hang; i++) { fprintf(filp, "%3d: ", i); // 3个数据宽度+1个冒号+1个空格,一共5个字符宽度,即和第0行的前5个空格对应。 fseek(filp, 4 * lie, SEEK_CUR); fprintf(filp, "\n"); // 换行符占两个字节宽度 } for (int i = 1; i <= hang; i++) // 第0行是列标号 { fseek(filp, i*(4 * lie + 5 + 2) + 5, SEEK_SET); // 括号中的+5表示每行的长度,+2表示换行符,外面的+5表示跳过当前行的前5个字符。 for (int j = 1; j <= lie; j++) { if ((i + j) % 2) fprintf(filp, " %3d", rand() % 200); else fseek(filp, 4, SEEK_CUR); } } fclose(filp); while (1); return 0; }
时间: 2024-12-25 04:28:30