【发布时间】:2012-03-27 01:06:04
【问题描述】:
我试图研究这个问题,但找不到任何可以帮助我的东西。我一直在尝试使用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() 时,它没有正确比较,而是返回 -1 或 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 方面做得更好。
【问题讨论】:
标签: c arrays string compare strcmp