В этом коде Почему Write () не работает с Int? - PullRequest
1 голос
/ 11 июля 2019

Я не могу понять, почему этот код не работает.он работает нормально с 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;
}

нет сообщений об ошибках

Ответы [ 2 ]

3 голосов
/ 11 июля 2019

Вам необходимо преобразовать 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 im используя c= ','; write(1,&c,1); c= ' '; write(1,&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;
}
1 голос
/ 11 июля 2019

Когда вы использовали printf, я предполагаю, что вы использовали:

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

Таким образом, вы явно указываете функции интерпретировать переменные как числа и печатать их.Когда вы используете write, предполагается, что вы используете char.Это означает, что это будет так же, как:

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

Попробуйте - вы увидите, что вы по-прежнему получаете пробелы.Это потому, что вы не интерпретируете переменные как символы, и поэтому конвертируете числа 1..9 в их буквенное значение ASCII.Это не нормальные символы и они будут пустыми.

Это было бы то же самое, если бы вы использовали char в main вместо int.Лучшим вариантом для преобразования нормального целого числа в значение ASCII, которое печатает указанное целое число, является ответ Кираном

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

, поскольку все символы ASCII для чисел являются последовательными.

...