【问题标题】:why is printf called twice? and even it seems random randomly?为什么 printf 被调用两次?甚至看起来是随机的?
【发布时间】:2021-12-24 09:02:50
【问题描述】:

我正在尝试制作读取 .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;
}

【问题讨论】:

  • buffer[i] = putchar(ch); - 你的意思可能是buffer[i] = ch;

标签: c printf malloc


【解决方案1】:

你乱跑的原因是你没有跳出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

【讨论】:

    猜你喜欢
    • 2016-12-10
    • 2021-05-16
    • 1970-01-01
    • 2013-07-15
    • 2014-07-11
    • 1970-01-01
    • 2010-10-30
    • 1970-01-01
    • 2021-07-13
    相关资源
    最近更新 更多