fscanf无法读取,fscanf读不出文件内容

http://www.itjxue.com  2023-01-06 13:21  来源:未知  点击次数: 

急求:matlab中fscanf读出结果为[],是个空矩阵,fscanf具体哪里出错啦

1. 打开文件2.txt的fopen函数中没有路径,所以程序将从当前工作路径找文件2.txt,如果没有,读取不到数据。或者也可以在fopen函数中加入路径,比如放在D盘根目录,那么用fid=fopen('D:\2.txt');

2. matlab中所有的操作都是矩阵形式的,fscanf读取的数据也是,其第三个参数就是规定读取的数据是什么矩阵的。如果要读取一个数据,那就是1*1的矩阵,所以参数不应该是1,而是[1 1]

a=fscanf(fid,'%f',[1 1]);

b=fscanf(fid,'%f',[1 1]);

c=fscanf(fid,'%f',[1 1]);

d=fscanf(fid,'%f',[1 1]);

f=fscanf(fid,'%f',[1 1]);

希望能有帮助

fscanf使用出错

if(fscanf(fp1,"%s,%s,%10.2f,%10.2f,%10.2f",stu[i].name,stu[i].num,stu[i].score[0],stu[i].score[1],stu[i].score[2])==EOF) 数据间如果是以逗号分隔,将用%s,这样的格式不可以!

{

printf("file read error");

exit(0);

}

只能先读取数据到一个大的字符串中,然后,用strchr()函数来定位数据,按字符串取出子串后,再进行不同类型的转换

fscanf读入空格的方法!要是不行可以给我建议个方案

1、fscanf用于读取字符串数据流,遇到空白字符(空格' '; 制表符'\t'; 新行符'\n')就停止,若要读取完整的一行数据,可以使用格式控制("%[^\n]%*c"),或者使用行读取函数getline)。

2、格式控制说明:%[ ]表示读取指定字符集的文本,例如%[0-9]表示仅读取数字,遇到非数字字符就停止;

3、%[a-zA-Z]表示读取字符,遇到非字母字符就停止)。

第一个字符是'^',表示反向读取,读取指定字符集以外的文本,遇到指定字符集就停止。

4、*表示忽略读取的字符,就是说读取指定的字符但不保存到变量中。

5、%[^\n]表示读取'\n'之外的所有字符;之后的%*c表示忽略读取的'\n',就是说读取'\n'但不保存。

6、%*[^\n]%*c表示跳过一行。

为什么fscanf读取中文字符串会出现错误?

你把存该成

fprintf(fp,"%d,%d,%d,%s\n",数据,数据,数据,数据);

读取用fscanf(fp,"%d,%d,%d,%s",numtest,rowtest,pictest,chartest);

或fscanf(fp,"%d,%d,%d,%s",numtest,rowtest,pictest,chartest);

fscanf()读取TXT中数据后出内存错误

void main(int args, char * arg[])

{

Tuple p;

vectorTuple init; //保存所有输入的特征对象

int i;

FILE*in;

in = fopen("shuju.txt","r");//由TXT中读入特征向量

//添加文件是否已经打开成功机制。失败情况之下会有问题的。

for(i=0;i_MUSIC;i++)

{

fscanf(in,"%.4f %.4f %d\r",p.attr1,p.attr2,p.n);

//fread(init[i],sizeof(struct Tuple),1,in);

init.push_back(p);

}

fclose(in);/*清理*/

kMeans(init); //调用k-Means算法进行聚类分析

}

C语言文件读取fscanf(),该怎么处理

fscanf位于头文件stdio.h中,函数原型为int fscanf(FILE*stream, constchar*format, [argument...]); 其功能为根据数据格式(format)从输入流(stream)中写入数据(argument);与fgets的差别在于:fscanf遇到空格和换行时结束,注意空格时也结束,fgets遇到空格不结束。

函数名: fscanf

功 能: 从一个流中执行格式化输入,fscanf遇到空格和换行时结束,注意空格时也结束。这与fgets有区别,fgets遇到空格不结束。

返回值:整型,成功返回读入的参数的个数,失败返回EOF(-1)。

用法:

1 int fscanf(FILE*stream,constchar*format,[argument...]);

FILE *stream:文件指针

char *format:格式字符串

[argument...]:输入列表

格式字符说明

常用基本参数对照:

%d:读入一个十进制整数.

%i :读入十进制,八进制,十六进制整数,与%d类似,但是在编译时通过数据前置或后置来区分进制,如加入“0x”则是十六进制,加入“0”则为八进制。例如串“031”使用%d时会被算作31,但是使用%i时会算作25.

%u:读入一个无符号十进制整数.

%f %F %g %G : 用来输入实数,可以用小数形式或指数形式输入.

%x %X: 读入十六进制整数.

%o': 读入八进制整数.

%s : 读入一个字符串,遇空字符‘\0'结束。

%c : 读入一个字符。无法读入空值。空格可以被读入。

附加格式说明字符表修饰符说明

L/l 长度修饰符 输入"长"数据

h 长度修饰符 输入"短"数据

示例说明

如果要求从标准输入中输入一串字符串和一个整型数,那么参数“%s%d”表示什么呢?默认情况下,在终端上(这里假设程序为控制台应用程序)输入第一个参数的值的时候敲下回车,则在第二行输入的为第二个参数值,采用这种输入方法那么格式字符的形式就无关紧要了。[1]

这里要特殊说明的是如果参数在同一行给出,那么格式字符的参数与终端的输入会有什么关系。举个例子:如果格式字符为“%s+%d”,那么参数的输入就应该为 string + integer。

程序例

例一

#include stdlib.h

#include stdio.h

int main(void)

{

int i;

printf("Input an integer:");

/*从标准输入中读取一个整数*/

if(fscanf(stdin, "%d",i))

printf("The integer read was:%d\n", i);

else

{

fprintf(stderr, "Error reading an integer from stdin.\n");

exit(1);

}

return 0;

}

返回EOF如果读取到文件结尾。

例二

附:MSDN中例子

#include stdio.h

FILE *stream;

int main(void)

{

long l;

float fp;

char s[81];

char c;

stream = fopen("fscanf.out", "w+");

if(stream==NULL)

printf("The file fscanf.out was not opened\n");

else

{

fprintf(stream,"%s%ld%f%c","a-string", 65000,3.14159, 'x');

/*将指针设置至文件开头*/

fseek(stream,0L,SEEK_SET);

/*从文件中读取数据*/

fscanf(stream,"%s",s);

fscanf(stream,"%ld",l);

fscanf(stream,"%f",fp);

fscanf(stream,"%c",c);

/*输出读取的数据*/

printf("%s\n",s);

printf("%ld\n",l);

printf("%f\n",fp);

printf("%c\n",c);

fclose(stream);

}

return 0;

}//这样会有意外输出

(责任编辑:IT教学网)

更多

推荐Javascript/Ajax文章