好的,我正在用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的原因。还有其他功能可以将缓冲区与字符串空字符一起刷新到字符串,并显示。这只是处理从文件中一次获取一个单词的位。
答案 0 :(得分:0)
您应该使用getline来读取文件流中的输入。
答案 1 :(得分:0)
97
是a
的字符代码,104
的{{1}}等等。尝试使用h
将其打印为字符。
我想知道每次程序执行第16行时文件位置是否更新为下一个字符?
在%c
中,每次复制字符时,您都需要更新缓冲区的索引(readWord
)。一旦你遇到换行符,你还需要空终止i
。 buffer
不可携带;检查换行时使用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