【问题标题】:What is the reason for writing the value of c again outside the loop and how are multiple values of c stored in one pipe?在循环之外再次写入 c 的值的原因是什么,以及 c 的多个值如何存储在一个管道中?
【发布时间】:2021-05-04 19:49:58
【问题描述】:
printf("Enter any alphabetical character or digit [type ; to end]:");
do{ 
    scanf("%c",&c);
    if(c>='0' && c<='9')
             write(RD[1],&c,1);
    if((c>='a' && c<='z') || (c>='A' && c<='Z') )
             write(RA[1],&c,1);
}while(c!=';');

write(RD[1],&c,1);
write(RA[1],&c,1);

c 的值已经写入循环中的管道。为什么我们要在循环之外再写一遍?

另外,c 的多个值如何在一个管道中一遍又一遍地存储?

【问题讨论】:

  • 也许正在阅读它们的任何东西都期望尾随;

标签: c


【解决方案1】:

c 的值已经写入循环中的管道。

不,不是。

c; 时,循环中的条件为假,因此不会在循环中写入任何内容。

c = ';' --> c>='0' && c<='9' is false, i.e. no write
c = ';' --> (c>='a' && c<='z') || (c>='A' && c<='Z') is false, i.e. no write

所以 ;只写一次 - 在循环之后

另外,c 的多个值如何在一个管道中一遍又一遍地存储?

好吧,我不是管道专家,但我认为它们具有一定的缓冲能力。也许阅读https://stackoverflow.com/a/59554475/4386427https://unix.stackexchange.com/questions/11946/how-big-is-the-pipe-buffer

【讨论】:

    【解决方案2】:

    当 c 为 ';' 时循环中断。对于这种情况,它不会写入管道。读者期待结尾';'所以它在循环之后被写入两个管道。

    【讨论】:

      猜你喜欢
      • 2021-05-22
      • 2011-07-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-23
      • 2015-02-11
      相关资源
      最近更新 更多