私はこの質問を調査しようとしましたが、私を助けるものを見つけることができませんでした。私は常にを使用してデバッグしようとしていますfprint
が、それでも理解できません。
私は中級のプログラマーです。ここで助けを得ることができればと思います。これが私のコードです:
int i = 0;
const int arraySize = 10;
char buf[256];
char str[256];
char buffer[256];
char *beerNames[arraySize] = { };
FILE *names;
FILE *percent;
i = 0;
int numBeers = 0;
printf("Please enter a name or (nothing to stop): ");
gets(buf);
while (strcmp(buf, "") != 0) {
beerNames[i] = strdup(buf);
i++;
numBeers++;
if (numBeers == arraySize)
break;
printf("Please enter a name or (nothing to stop): ");
gets(buf);
}
// now open files and look for matches of names: //
names = fopen("Beer_Names.txt", "r");
percent = fopen("Beer_Percentage.txt", "r");
while (fgets(str, sizeof(str) / sizeof(str[0]), names) != NULL) {
fgets(buffer, sizeof(buffer) / sizeof(buffer[0]), percent);
for (i = 0; i < numBeers; i++) {
if (strcmp(str, beerNames[i]) == 0) {
printf("Beer: %s Percentage: %s\n", str, beerNames[i]);
break;
}
}
}
fclose(names);
fclose(percent);
だから、私が抱えている問題は、私がしようとしたときにstrcmp()
、正しく比較されておらず、a-1
またはaのいずれかを返していること1
です。値も出力してみましたstrcmp()
が、0に等しい場合は一致をスキップしてしまいます。
私のBeer_Names.txt(短縮)は次のようになります。
Anchor Porter
Anchor Steam
Anheuser Busch Natural Light
Anheuser Busch Natural Ice
Aspen Edge
Big Sky I.P.A.
Big Sky Moose Drool Brown Ale
Big Sky Powder Hound (seasonal)
Big Sky Scape Goat Pale Ale
Big Sky Summer Honey Ale (seasonal)
Blatz Beer
Blatz Light
Blue Moon
そして、私のBeer_Percentage.txt(短縮)は次のようになります。
5.6
4.9
4.2
5.9
4.1
6.2
5.1
6.2
4.7
14.7
4.8
0
5.4
これは宿題ではありません。私は個人的なプロジェクトを行っているだけで、Cを上達させようとしています。