3

私は C プログラミングは初めてですが、Java の知識は少しあるので、ファイルに保存されている文字列を読み取るプログラムを作成したいと考えてい"boy","girl","car"ますstring str[]=str1.split(" ");

そのため、毎回いくつかのコードを思いつきましたが、どれも機能しないようです。これが私の最新のコードです:

fscanf(fp,"%[^\n]",c);

ただし、これは基本的に、新しい行が見つかるまで行全体を出力します。私も使ってみました

fscanf(fp,"%[^,]",c);

そして、私がgets()それを使用すると、最初の文字列のみを取得し、最初のコンマから他のすべてを無視します。

これは合理的な出力を提供しませんでした。むしろ、いくつかの分(エンコードされた)文字を提供しました。コンマと引用符で区切られた文字列値を選択する方法を教えてください。

4

4 に答える 4

0
#include <stdio.h>

int main(void){
    char line[128];
    char word[32];
    FILE *in, *out;
    int line_length;

    in  = fopen("in.txt", "r");
    out = fopen("out.txt", "w");

    while(1==fscanf(in, "%[^\n]%n\n", line, &line_length)){//read one line
        int pos, len;
        for(pos=0;pos < line_length-1 && 1==sscanf(line + pos, "%[^,]%*[,]%n", word, &len);pos+=len){
            fprintf(out, "%s\n", word);
        }
    }
    fclose(out);
    fclose(in);
    return 0;
}
/* output result out.txt
"boy"
"girl"
"car"
...
*/
于 2013-06-19T09:06:30.150 に答える
0

fscanf は正規表現ではなく、プレースホルダーで機能します。したがって、読み取りたいもののプレースホルダーを指定する必要があります。そうすれば、fscanf はパターンに一致する次の要素を取得します。必要なものを取得するには、次のようなものを使用します。

char word[enough_space];
.
.
.
while(fscanf(fp, "\"%s\"", word) != EOF)
{
  //Do something with yout word.
};

ここでは、引用符で囲まれた文字列を取得しようとしています。マッチのどの部分を保存する必要があるかをプレースホルダーがどのように示しているかに注意してください。連続する呼び出しでは、fscanf は次の一致に到達します。ファイル全体を消費すると、EOF が返されます。

于 2013-06-19T06:38:53.057 に答える