1

C を使用して、常に特定の場所にある文字列をテキスト ファイルで検索しようとしています。具体的には、3 つの連続したダッシュを探しています。3 つのダッシュが見つかると、それが見つかった行を返す必要があります。次に、次の行に進み、ファイルの最後に到達するまで 3 つの連続したダッシュを検索し続けます。毎回行番号を出力する必要があります。

これは私がこれまでに持っているものです:

int main() {
FILE *f;
char inName[80];
printf("Read text from: ");
scanf(" %79[^\n]s\n", inName);

f  = fopen(inName, "r");
if (f == 0) printf("ERROR: Cannot open file %s for reading.\n", inName);
int lineNumber = 0;

for(;;) {       
    char line[127]; 
    fgets(line, 127, f);
    if (!feof(f)) { 
        lineNumber++;
    } else {
        break;
    }

    double lf;  
    int d, d1;
    char s[30];
    char s1[4];

    sscanf(line, " %d, %s, %s, %s, %s, %d, %d, %lf",
                   &d, &s, &s, &s, &s, &d, &s1, &lf);
    if (s1 == "---") {
        printf("%d\n", lineNumber); // what line 
    }
}
fclose(f);

return(0);
}

このコードは実行されますが、何も出力されません。誰でもこれを行う方法を示すことができますか? ありがとう :)

4

3 に答える 3

5
if (s1 == "---")

文字列を間違った方法で比較しています。使用する必要がありますstrcmp()

この例に従って ください http://faq.cprogramming.com/cgi-bin/smartfaq.cgi?answer=1057537653&id=1043284385

于 2013-04-24T19:21:15.963 に答える
5

これは、C で文字列を比較する方法ではありません。

if (s1 == "---")

s1のアドレスを文字列リテラルのアドレスと比較します"---"。使用strcmp():

if (strcmp(s1, "---") == 0)
{

sscanf()変数を使用する前に、変数に実際に値が割り当てられていることを確認するために、常に の戻り値を確認してください。書式指定子で処理する場合、,コンマ文字は区切り文字として扱われず"%s"、空白のみが区切り文字として使用されます。,プログラムで以前に行った方法と同様に、スキャン セットを使用するの消費を防ぐには(sscanf()引数の修正に注意してください)。

if (sscanf(line,
           " %d, %29[^,], %29[^,], %29[^,], %29[^,], %d, %3[^,], %lf",
             &d, s,       s,       s,       s,       &d, s1,     &lf) == 8)
{
}
于 2013-04-24T19:21:16.793 に答える
2

char[]と比較することはできません==。代わりにstrcmpを使用してください。

if( strcmp(s1, "---") == 0 )
于 2013-04-24T19:21:40.417 に答える