首页 > 解决方案 > 为什么 printf 被调用两次?甚至看起来是随机的?

问题描述

我正在尝试制作读取 .bin 文件并找到“人造字符”的程序。我没有走多远,因为每次我尝试打印找到的字符的缓冲区时,它都会打印两次,或者打印我不应该打印的那些。我发现只有fflush(stdout)打印一次。现在我试图将它打印为字符串printf(%s, buffer)并且我试图用for()来做它(没有工作)。现在我不知道该怎么办。

int main(int argc, char** argv) {
    int l = 3;
    if(argc >= 2){
        l = atoi(argv[1]);
    }

    char* buffer = (char*) malloc((l + 1) * sizeof(char));
    int ch;
    int i = 0;

    while ((ch=getchar()) != EOF) {
        if (i == l) {
            buffer[i] = '\0';
            printf("%s", buffer);
            i = 0;
        }
        if (ch >= ' ' && ch <= '~') {
            buffer[i] = putchar(ch);
            i++;
        } else {
            printf("\n");
            i = 0;
        }
    }

    return 0;
}

标签: cprintfmalloc

解决方案


你乱跑的原因是因为你没有跳出while循环。这是应该的代码break

 if (i == l) {
            buffer[i] = '\0';
            printf("%s", buffer);
            i = 0;
 }

因此,在你戴上右括号之前,请跳出 while 循环。您不再需要 while 循环。这是修改后的if块:

 if (i == l) {
            buffer[i] = '\0';
            printf("%s", buffer);
            i = 0;
            break;
 }

因为你没有加入 break ,所以它跳到了else.


推荐阅读