【问题标题】:In this code Why Write() doesn't work with Int?在这段代码中,为什么 Write() 不适用于 Int?
【发布时间】:2019-11-20 19:12:32
【问题描述】:

我不明白为什么这段代码不起作用。它适用于 printf,但我无法让它适用于 write...

#include <stdio.h>
#include <unistd.h>

int ft_putchar(char a,char b,char c){
    write(1,&a,1);
    write(1,&b,1);
    write(1,&c,1);
    return(0);
}

int main()
{
 int x = 0;
 int y, z;

 while(x <= 9){
     y = x + 1;
     while(y <= 9){
         z = y + 1;
         while(z <= 9){
             ft_putchar(x,y,z);
             z++;
         }
         y++;
     }
     x++;
 }
    return 0;
}

没有错误输出

【问题讨论】:

  • 到底是什么问题?
  • 如果您使用 printf(%d%d%d,x,y,z) 而不是 ft_putchar(x,y,z) 它可以很好地打印数字。但我无法让它与 ft_putchar 一起使用。它打印不可见的字符

标签: c while-loop char int


【解决方案1】:

在写入之前,您需要将ASCII 转换为等效的digit

example 5 = '5' +'0'

到目前为止,您正在将 ASCII 值写入终端。

int ft_putchar(char a,char b,char c){

    a += '0';
    b += '0';
    c += '0';

    write(1,&a,1);
    write(1,&b,1);
    write(1,&c,1);
    return(0);
}

我想像这样打印它们,但最后它应该什么都没有 578, 579, 589, 678, 679, 689, 789, 而不是 789, 它应该是 789 我 使用c= ','; write(1,&amp;c,1); c= ' '; write(1,&amp;c,1);

您需要将分隔符传递给ft_putchar函数,

int ft_putchar(char a,char b,char c, char del){

    a += '0';
    b += '0';
    c += '0';
    write(1,&a,1);
    write(1,&b,1);
    write(1,&c,1);
    write(1,&del,1);
    return(0);
}

int main()
{
 int x = 0;
 int y, z;

 while(x <= 9){
     y = x + 1;
     while(y <= 9){
         z = y + 1;
         while(z <= 9){

            if (x == 7 && y == 8 && z == 9)
             ft_putchar(x,y,z, ' ');
            else
             ft_putchar(x,y,z, ',');
             z++;
         }
         y++;
     }
     x++;
 }
    return 0;
}

【讨论】:

  • @ZozeR 如果要在每个输出上打印新行,请在函数末尾使用 c = '\n'; write(1,&amp;c,1);
【解决方案2】:

当你使用printf时,我猜你使用的是:

printf("%d %d %d",a,b,c);

因此,您明确告诉函数将变量解释为数字,然后打印出来。当您使用 write 时,它​​假定您使用的是 char。这意味着这将与以下内容相同:

printf("%c %c %c",a,b,c);

试试看 - 你会看到你仍然得到空白。那是因为您没有将变量解释为字符,因此将数字 1..9 转换为它们的 ASCII 字母值。这些不是普通字符,会显示为空白。

如果您在main 中使用char 而不是int,这将是相同的。将普通整数转换为打印所述整数的 ASCII 值的最佳选择是通过 Kiran 的回答,

myInt += '0'; //Only works for numbers than 0..9. You may has well have used char to save space.

因为数字的所有 ASCII 字符都是连续的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-22
    • 2016-04-14
    • 2020-11-13
    • 2016-04-08
    • 1970-01-01
    • 2013-10-10
    • 2021-06-21
    • 2022-01-14
    相关资源
    最近更新 更多