文本內容是:[abc]|[abc]|[30]
我想把a1存abc,a2存abc,a3存30
代碼如下
#include <stdio.h>
int main(){
char a1[10],a2[10];
int a3;
FILE *fp;
fp=fopen("data1.txt","r");
fscanf(fp,"[%s]|[%s]|[%d]",a1,a2,&a3);
printf("%s",a1);
return 0;
}
最后我的a1把所有文本內容都存入了即[abc]|[abc]|[30],而我的a2和a3里面就什么也沒有,我是哪里出錯了
uj5u.com熱心網友回復:
%s默認掃描到whitespace(空格,換行,制表符等)后結束建議用Negated scanset,詳見http://www.cplusplus.com/reference/cstdio/scanf/
下面用sscanf代替fscanf測驗
#include <stdio.h>
#define TESTSTR "[abc]|[abc]|[30]"
#define NEGFMT "%[^]]"
#define DECFMT "%d"
int main(){
char a1[10], a2[10];
int a3;
sscanf(TESTSTR, "[" NEGFMT "]|[" NEGFMT "]|[" DECFMT "]", a1, a2, &a3);
printf("a1 = %s, a2 = %s, a3 = %d\n", a1, a2, a3);
return 0;
}
運行結果見https://www.ideone.com/aRQZQe
uj5u.com熱心網友回復:
很感謝,問題解決了,也讓我看到了問題所在,謝謝。轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/264608.html
標籤:新手樂園
