2016-11-29 9 views
1

こんにちはこれは愚かな質問かもしれませんが、私の世界のためにそれを理解することはできません!fscanfのcharをintとして使用する方法

(c)において、Iは、数字と文字の両方を持つようなファイルを読み込むしようとしているが、私は私のプログラミングのものに番号のみを使用します。それは次のようになります。

t1 stuff 12 123 stuff 
t1 stuff 12 123 stuff 
t1 stuff 12 123 stuff 
t2 stuff 12 123 stuff 
t2 stuff 12 123 stuff 
t3 stuff 12 123 stuff 
t4 stuff 12 123 stuff 
t4 stuff 12 123 stuff 
t4 stuff 12 123 stuff 
t33 stuff 12 123 stuff 

(それは私だけ大きなリストを避けるために、T33に、T4からスキップこのにT33するすべての方法を実行します)、私はそれをやっ

方法は次のとおりです。

Struct name { 
char t_numbers 
etc.. 

と:

info(struct name*stuff) { 
    FILE *data; 
    data= fopen("thefilename", "r"); 
    int i=0; 
    while (fscanf(file, "%s %s %d %d %s\n",stuff[i].t_numbers, etc etc...) == 5) 
... 

は今、私が最初にintとして及びt_numbersを実行しようとしましたトン%Dではなくファイルではなく、理由は「T」の文字のことcharとs%の間でのみ実行できます。

問題は、私が代わりにポインタのintとして[i]の.t_numbersのものを使用する方法、ありますか?だから、それはその中の「T」ではなく数字を使用します。

例:

while (k<=10) { 
     while (stuff[i].t_numbers==n) { 

は、それがint型と比較されるポインタですので、動作しませOFCます。しかし、それを動作させる方法は?どのように "T"なしでそれらのデータを使用するので、私はそれを行うことができます。

私はそれは愚かな質問だ場合のために、非常に残念ですか、それが既に求められている場合(どこでも検索します)。私は全く新しいです。

(それは例としてだけ速くドラフトだったのでコード等のスペルミスを持つことができます)

答えて

0

あなたはT1、T2、T3、...

から数字だけをしたい私の理解あたりとして、私はシンプルなソリューションを持っています。最初に1文字しかない場合にのみ機能します。

以下のようにintの前に1文字読み込むようにコードを変更してください。

info(struct name*stuff) { 
    FILE *data; 
    data= fopen("thefilename", "r"); 
    int i=0; 
    char dummyT = 0; 
    while (fscanf(file, "%c%d %s %d %d %s\n",&dummyT, stuff[i].t_numbers, etc etc...) == 5) 
+0

それを試してみましたが、悲しいことにfscanfは単にファイルのスキャンを停止します。プログラムは実行されますが、番号や何もスキャンされません。 t%dとあなたのソリューションの両方。 – PeteD

+0

それは働いた!私は最初に空白の問題を忘れてしまった!何度もありがとう – PeteD

2

intことができませんt_numbersについてのあなたの主張フォーマット文字列が正しいとあなたが"T%d"使用することはできませんので、誤解を招く。適切な文字列を使用した場合、"t%d"はうまく動作します。

+0

それはスペルミスだったのです!それを何度もごめんなさい! – PeteD

0
info(struct name*stuff) { 
FILE *data; 
data= fopen("thefilename", "r"); 
int i=0; 
char dummyT = 0; 
while (fscanf(file, "%c%d %s %d %d %s\n",&dummyT, stuff[i].t_numbers, etc etc...) == 

は、データに置き換えることがファイルではないでしょうか? whileループは、fscanfが5を返すかどうかを確認するように見えます。ファイルが最後にあるかどうかを確認するか、可能であればカウンタを33にループしてください。 %sを使用したい場合、t_numbersを配列にする必要があります。

関連する問題