0

好的,我正在使用 C 语言编写拼写检查程序。我遇到的问题是将系统词典中的一个单词读入程序。我已经搜索了一个答案,但我找不到任何完全正确的东西,可能是因为这是一个非常基本的东西。这是我到目前为止的代码。

void readWord(FILE * stream, int buffer[]){
15   
16   while(fgetc(stream) != 10){
17     buffer[i] = fgetc(stream);              
18     printf("copying %d to buffer\n", buffer[i]);    //added for debugging
19   }
20   return;
21 }

以下是函数调用中使用的变量以及调用

int buffer[WIZE];
readWord(dictionary, buffer, WSIZE);

字典指向/usr/share/dict/words,并且有代码可以确保它正确打开,但我没有把它放在这个问题中;也许这毕竟是问题所在。这应该输出 Aarhus,但它会输出:

Dictionary opened successfully
copying 97 to buffer
copying 104 to buffer
copying 115 to buffer

我想知道是否每次程序执行第 16 行文件位置都会更新到下一个字符?如果指针从第二个字符开始,则输出是 Aarhus 的每隔一个字母。

readWord 函数还用于从文本文件中读取单个单词进行检查,这就是我没有使用 getline 的原因。还有其他函数可以将缓冲区连同终端空字符一起刷新为字符串并显示。这只是处理一次从文件中获取一个单词的问题。

4

4 回答 4

0

您应该使用 getline 从文件流中读取输入。

于 2012-06-18T01:48:52.123 回答
0

97a, 104forh等的字符代码。尝试使用 . 将它们打印为字符%c

我想知道是否每次程序执行第 16 行文件位置都会更新到下一个字符?

在您的每次复制字符时,readWord您都需要更新缓冲区的索引( )。一旦你打了一个换行符,你i还需要空终止。不便携;检查换行符时使用。buffer10\n

于 2012-06-18T01:48:58.830 回答
0
while(fgetc(stream) != 10){

在 while 条件下,您正在读取未保存到任何位置的字符。然后,您在正文中读取了另一个字符,因此每次迭代读取 2 个字符并仅保存一个字符。

此外,您将字符存储在缓冲区 [i] 中,但 i 没有增加。试试这个:

while((buffer[i] = fgetc(stream)) != 10){
     printf("copying %c to buffer\n", buffer[i]);    //added for debugging
     i++;
 }
于 2012-06-18T01:51:56.723 回答
0

多亏了答案,它才能工作;这是修复

void readWord(FILE * stream, int buffer[]){
    unsigned short int i = 0;
    while((buffer[i] = fgetc(stream)) != '\n'){
            printf("copying %d to buffer\n", buffer[i]);
            i++;
    }
    return;
}

- 和输出

Dictionary opened successfully
copying 65 to buffer
copying 97 to buffer
...
Dictionary word is Aarhus
于 2012-06-18T02:03:15.637 回答