当前位置: 首页 > 知识库问答 >
问题:

为什么在输出后面有一个额外的百分比符号?

韩阳云
2023-03-14

我最近正在学习linux下的fork()函数。我写了个程序。

#include<stdio.h>
int main(){
    int p1, p2;
    while((p1 = fork()) == -1);
    if(p1 == 0)
        printf("b");
    else{
        while((p2 = fork()) == -1);
        if(p2 == 0)
            printf("c");
        else
            printf("a");
    }
}

在我编译并运行它之后,我得到了一个意外的百分号。

但是如果我在这些字母后面加上\n,百分号就消失了。

有人知道原因吗?

我还有一个问题。每次我重播节目时,得到的答案都是一样的。它总是显示“ACB”。顺序总是一样的。为什么?

共有1个答案

赫连坚
2023-03-14

您的shell(zsh)添加了它,以指示输出没有以换行符结束。

要消除它,只需以\n结束输出。

至于另一个问题,它不是确定性的。如果你在其他地方运行它或足够多的时间,你可能会得到不同的结果。但这说明了为什么同步问题如此难以发现,因为事情似乎总是运行相同(几乎)。

 类似资料:
  • 例如,当我为num1输入2,为num2输入3时,我希望在输入第二个数字后立即获得8的输出。但是,程序希望我再输入一个整数,而我只输入一个随机数,如242,它仍然输出8,这意味着它不会影响结果。所以我的问题是为什么有第三个输入?感谢您的帮助!

  • 问题是 有一个输入字符串集合和一个查询字符串集合。对于每个查询字符串,确定它在输入字符串列表中出现的次数。 字符串=[ab,ab,abc]查询=[ab,abc,bc]有ab的实例2,'abc'的实例1和'bc'的实例0。对于每个查询,添加一个元素。 现在我尝试使用链表实现它,但不是以2,1,0的形式获得输出。我得到的输出是2,1,0,2,2,1,0,2。我不知道是如何为超过3个链接创建LL的。请帮

  • 编写并测试您自己的函数char*funct(char*str,int x),反转字符串str(位置n的字符除外),并返回修改后的str作为结果。函数funct的用途可以是: 这是主要的: 你好CppepC ollH 应该是: 你好Cpp

  • 我在程序末尾有以下语句: 有人能告诉我为什么会这样吗?

  • 为什么在这个输出的末尾有一个尾随的%?我尝试刷新流(而不是endl),但是当我调用endl结束流时,它会删除%。这里的任何帮助都将不胜感激。 下面是关于编译器的更多信息,我使用的是macOS 10.15.4:

  • 我是java初学者,我对上述程序的输出感到困惑。请给我解释一下输出的原因。