C语言如何用fscanf按行读取一段固定格式

要读取的是一行OR2_X2C401(.A1(n66),.A2(n85),.ZN(N142));中的OR2n6n85N142这四个字符串有多行这样的文字如何用C实现?谢谢... 要读取的是一行
OR2_X2 C401 ( .A1(n66), .A2(n85), .ZN(N142) );
中的OR2 n6 n85 N142这四个字符串
有多行这样的文字
如何用C实现?谢谢
展开
 我来答
风若远去何人留
推荐于2016-08-16 · 知道合伙人互联网行家
风若远去何人留
知道合伙人互联网行家
采纳数:20412 获赞数:450132
专业C/C++软件开发

向TA提问 私信TA
展开全部
在fscanf的第二个参数,格式字符串中,指定对应的格式即可。
fscanf与scanf类似,可以格式化输入一组数据,不过不是从终端,而是从对应文件中。

其声明为:
int fscanf(FILE *fp, const char *fmt, ...);
功能为从打开的文件fp中,根据fmt格式字符,读取数据到后续参数中,并返回实际读取的个数。

比如,文件中存着以逗号分隔的三个整型数值,那么将其读取的操作即
fscanf(fp,"%d:%d:%d",&a,&b,&c);
其中,fp为打开的文件指针,abc分别是三个整型变量。
L_o_o_n_i_e
推荐于2017-12-16 · TA获得超过4.2万个赞
知道大有可为答主
回答量:8507
采纳率:38%
帮助的人:5228万
展开全部
你可以用fgets()按行读取内容到 字符串变量里,然后处理。
假如已读入到 str[80] 里:
char str[80]="OR2_X2 C401 ( .A1(n66), .A2(n85), .ZN(N142) )";
多行这样的文字格式,
如果位置固定,可以直接读出:
char r[4][5];
sscanf(str,"%s",r[0]); r[0][3]='\0';printf("%s\n",r[0]);
sscanf(str+18,"%s",r[1]); r[1][2]='\0';printf("%s\n",r[1]);
sscanf(str+28,"%s",r[2]); r[2][3]='\0';printf("%s\n",r[2]);
sscanf(str+38,"%s",r[3]); r[3][4]='\0';printf("%s\n",r[3]);
------------------------
如果位置不固定,我们可以用查找 点号的位置加4:
int i,j,L[3];
j=0;
for (i=0;i<strlen(str);i++){
if (str[i]=='.'){L[j]=i+4; j++;}
}
sscanf(str,"%s",r[0]); r[0][3]='\0';printf("%s\n",r[0]);
sscanf(str+L[0],"%s",r[1]); r[1][2]='\0';printf("%s\n",r[1]);
sscanf(str+L[1],"%s",r[2]); r[2][3]='\0';printf("%s\n",r[2]);
sscanf(str+L[2],"%s",r[3]); r[3][4]='\0';printf("%s\n",r[3]);
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式