C:处理文件流中的fgetc输入

时间:2012-06-18 01:41:03

标签: c fgetc

好的,我正在用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,并且有代码确保它正确打开但我没有把它放在这个问题中;也许那就是问题。这应输出奥胡斯,但输出:

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

我想知道每次程序执行第16行时文件位置是否更新为下一个字符?如果指针从第二个字符开始,则输出是奥胡斯的每个其他字母。

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

4 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

97a的字符代码,104的{​​{1}}等等。尝试使用h将其打印为字符。

  

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

%c中,每次复制字符时,您都需要更新缓冲区的索引(readWord)。一旦你遇到换行符,你还需要空终止ibuffer不可携带;检查换行时使用10

答案 2 :(得分:0)

while(fgetc(stream) != 10){

在while状态下,您正在阅读未保存到任何地方的角色。然后,你读取正文中的另一个,所以你每次迭代读取2个字符,只保存一个。

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

while((buffer[i] = fgetc(stream)) != 10){
     printf("copying %c to buffer\n", buffer[i]);    //added for debugging
     i++;
 }

答案 3 :(得分: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