问题描述
下面的代码段创建,填充多维字符串数组并将其填充到文本文件。然后,允许用户从文件中提取单个数组元素。 (感谢MikeCAT的投入。)
但是,如果在程序所在的位置等待用户输入以告知要提取哪个字符串(此时程序已经写入并关闭了Data.txt文件),我用记事本打开文本文件,如果字符串在记事本文件中 (在字符串长度限制内),请编辑一个,然后保存并关闭记事本 >文件,然后在提示符下输入要提取的字符串元素,例如1 2 1,程序将打开已编辑的记事本文件,以获取所需的字符串,但输出不是已编辑的字符串,或者实际上不是限制为“字符串长度”参数。
当前将数组保存到.txt文件,然后使用记事本打开,编辑和保存该数组。
在该网站和Google上进行的搜索未告知我应使用哪种文件类型(扩展名)来存储数据,或者可以使用哪种程序打开,编辑和保存该文件,以便程序可以正确提取编辑的字符串。
P.S理想情况下,存储数组的文件应可读为“普通”文本。
您的智慧得到了赞赏
#include <stdio.h>
#include <string.h>
#define ELEMENT_SIZE 20
struct data_cell
{
char my_data[3][3][3][ELEMENT_SIZE];
int element_num[3];
};
void main()
{
/** for writing**/
struct data_cell save;
int x,y,z;
char d[] = {'0'};
/** for reading **/
struct data_cell from_file;
int dimensions[3];
int a,b,c ;
char path[] = "C:\\Users\\dave\\Documents\\data.txt";
FILE *fp ;
if ((fp = fopen(path,"w")) == NULL)
{
printf("cannot open file");
exit(1);
}
for(x=0 ; x< 3 ; x++)
for(y =0 ; y < 3 ; y++)
for(z =0 ; z < 3 ; z++)
{
strcpy(save.my_data[x][y][z],"element is at ");
save.my_data[x][y][z][8] = d[0];
d[0]+=1; /** !!!!! d[0] is a"char",therefore when d[0] > 9 it appears as symbol or letter !!!**/
save.element_num[0] = x;
save.element_num[1] = y;
save.element_num[2] = z;
printf("data_cell %s[%d][%d][%d]\n",save.my_data[x][y][z],save.element_num[0],save.element_num[1],save.element_num[2] );
}
fwrite(&save,sizeof(save),1,fp);
fclose(fp);
/** reading **/
printf("enter array element to be read eg 1 2 1"); /** Range 0-2,press return between each**/
scanf("%d %d %d",&dimensions[0],&dimensions[1],&dimensions[2] );
a = dimensions[0];
b = dimensions[1];
c = dimensions[2];
if ((fp = fopen(path,"r")) == NULL)
{
printf("cannot open file");
exit(1);
}
fread(&from_file,sizeof(from_file),fp );
/** !!! element ident is a "char",therefore when element ident > 9 it appears as symbol or letter !!!**/
printf("data_cell.my_data %s [%d][%d][%d]",from_file.my_data[a][b][c],a,c );
fclose(fp);
}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)