我正在开发一个程序,将用户(英语)中的字符串翻译成西班牙语。 对于作业,我给出了一个文件,其中包含100个单词的列表及其西班牙语等价物。我已成功打开该文件,并将其提供给带有二维数组的字符串。
我遇到的困难是解析单词,这样我就可以找到给定单词的等效版本;任何未给出的单词都应该替换为星号(*)。关于如何从用户输入的字符串中解析单词的任何想法? 下面是源代码的snippits,以节省一些时间。
- 由于
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循环,所以我可以看到单词(为了好奇)并且它是成功的。文件字符串的格式是 (英文单词),(西班牙语单词)。
答案 0 :(得分: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
将包含您读取的行数。