求问fscanf与二维数组的问题
本帖最后由 wuliaaa 于 2019-12-15 20:56 编辑问题:现在有一个文本,里面有像表格一样的数据像这样
weer 1234awf 2331
wwqeq q3231 24e3f
213yf 214 wqf
213g wdeqyq 213e
要把这一些数据,按照char字符串读取并存入二维数组a[][], 例如a=weer, a=1234awf这样,这样的代码要怎么写啊?(不是要print是要为后面的数据处理做准备)
我自己写的代码好像一直读取不了,没办法写入二维数组,都是换行符{:10_266:}
#include <stdio.h>
#include <stdlib.h>
#define hang 10
#define lie 6
int main()
{
int i, j;
FILE *fid;
char a = { 0 };
char str, str2, str3;
fid = fopen("data.txt", "a+");
for (i = 0; i < hang; i++){
fscanf(fid, "%256[^,]", &str);
for (j = 0; j < lie; j++){
fscanf(fid, "%s ", &a);
}
}
}
求问这样代码要怎么设计啊{:10_266:} 或者我自己编写的错误代码要怎么修改才能达成这个目的呢?数据用txt或csv都可以,谢谢啦{:10_266:} 本帖最后由 superbe 于 2019-12-15 22:49 编辑
测试代码如下。在你的代码上做了修改,可以实现要求的功能。我是在上面示例的4行3列的txt文件上测试的。
假定文件开始没有特殊行(比如空行),根据实际文件内容修改吧。
/* data.txt
weer 1234awf 2331
wwqeq q3231 24e3f
213yf 214 wqf
213g wdeqyq 213e
*/
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include <string.h>
#define hang 4//4行
#define lie 3 //3列
int main()
{
int i, j;
FILE *fid;
char *a = { 0 };
char str;
fid = fopen("data.txt", "r");
/* 读入到数组 */
for (i = 0; i < hang; i++) {
for (j = 0; j < lie; j++) {
fscanf(fid, "%s", str);
a = (char *)malloc(strlen(str)+1);
strcpy(a, str);
}
fscanf(fid, "%256[^\n]", str);
}
/* 显示数组内容(验证) */
for (i = 0; i < hang; i++){
for (j = 0; j < lie; j++) {
printf("%s ", a);
}
printf("\n");
}
/* 释放内存 */
for (i = 0; i < hang; i++) {
for (j = 0; j < lie; j++) {
free(a);
}
}
return 0;
}
再仔细想一想,其实你要的是个三维数组而不是二维数组。
给个参考把#include <stdio.h>
#include <string.h>
#define N 100
#define CX 6
#define _Out_
typedef char line;
void Read(const char* path,line* _Out_ ret){
FILE* fp=fopen(path,"r");
int y=0,x=0;
while (fscanf(fp,"%s",ret)!=EOF){
if (getc(fp)=='\n'){
y++;
x=0;
}
}
fclose(fp);
}
int main(){
line a;
memset(a,0,sizeof(a));
Read("D:\\1.txt",a);
for (int y=0;a!='\0';++y){
for (int x=0;a!='\0';++x){
printf("%s ",a);
}
printf("\n");
}
}
页:
[1]