0

我正在开发一个程序,它将用户(英语)的字符串翻译成西班牙语。对于作业,我得到了一个文件,其中包含 100 个单词的列表及其对应的西班牙语。我已经成功打开了该文件,并将其提供给带有二维数组的字符串。

我遇到的困难是解析单词,这样我就可以找到给定单词的等效版本;任何未给出的单词都应该用星号 (*) 替换。关于如何从用户输入的字符串中解析单词的任何想法?下面是源代码的片段,以节省一些时间。

- 谢谢

char readFile[100][25];

fp = fopen("words.dat", "r");

if (fp == NULL){
   printf ("File failed to load\n");
}

//This is how I stored the file into the two dimensional string.
while (fgets(readFile, 100, fp)){
   x++;
}

printf ("User please input string\n");
gets (input);

这就是我所得到的。我注释掉了输出单词的 for 循环,这样我就可以看到单词(出于好奇),它是成功的。文件字符串的格式为(英文单词),(西班牙文单词)。

4

1 回答 1

2

首先,您声明的数组是 100 个 25 个字符的数组。如果我们谈论“行”,则意味着您有 100 行,其中每行可以是 24 个字符(请记住,我们需要一个额外的终止'\0'字符)。如果您想要 25 行,每行 99 个字符,请切换大小的位置。

其次,您一遍又一遍地覆盖数组的相同字节。由于每个子数组实际上只有 25 个字符,因此您最多可以使用该fgets调用覆盖其中四个数组。

我建议这样的事情:

size_t count = 0;
for (int i = 0; i < sizeof(readFile) / sizeof(readFile[0]) &&
                fgets(readFile[i], sizeof(readFile[i]), fp); i++, count++)
{
}

这将确保您阅读的内容不会超过您可以存储的内容,并自动读入数组中正确的“行”。循环count后将包含您阅读的行数。

于 2013-04-11T23:11:36.937 回答