我遇到了这段代码的问题。它应该从文件中读取字母并将其写入另一个文件中,如下例所示
in.txt:
AAAAAAAAAABCCCCC
AAAAAAAAAAAAAAAAAAAA
BBCDERFG
out.txt
10A1B5C
20A
2B1C1D1E1R1F1G
但我继续得到这个......
out.txt
10A1B5C
20A
2B1C1D1E1R1F1G 1A11.
你能告诉我为什么我无法得到我想要的地方吗?提前谢谢你
#include <stdio.h>
#include <stdlib.h>
#define MAX_STRING 514
int main(int argc, char *argv[])
{
if(argc!=3) {
fprintf(stderr, "Exactly 3 arguments required");
exit(EXIT_FAILURE);
}
FILE *in;
FILE *out;
int i=0, k=0;
char buffer[MAX_STRING];
char string[MAX_STRING];
in = fopen(argv[1], "r");
if(in==NULL) {
fprintf(stderr, "Couldn't open the file %s", argv[1]);
exit(EXIT_FAILURE);
}
out=fopen(argv[2], "w");
if(out==NULL) {
fprintf(stderr, "Couldn't open the file %s", argv[2]);
exit(EXIT_FAILURE);
}
while(fgets(buffer, MAX_STRING, in)!= NULL) {
i=0;
while(buffer[i]!='\n') {
if(buffer[i]==buffer[i+1]) {
k++;
i++;
}
else {
fprintf(out, "%c%d", buffer[i], k+1);
i++;
k=0;
}
}
fprintf(out, "\n");
}
return 0;
}
答案 0 :(得分:0)
您可能在文件末尾没有\n
。所以这个循环:
while(buffer[i]!='\n')
不会停止并会考虑所有缓冲区(包括之前的字符):
BBCDERFGAAAAAAAAAAAA
答案 1 :(得分:0)
我怀疑没有&#34; \ n&#34;在最后一行的末尾 - 因此缓冲区仍然是“满”的。 &#34; A&#34;来自前一行(即缓冲区末尾有11个A)。
而不是寻找&#34; \ n&#34;确定缓冲区的结束,检查&#34; \ 0&#34; (最后将由fgets()注入)。 即。
while(buffer[i]!='\0')
{
...
}