аргумент putch делает целое число из указателя без приведения - PullRequest
0 голосов
/ 17 октября 2019

в моей следующей программе я получаю ошибку, что «передача аргумента 1 'putch' делает целое число из указателя без приведения", если я использую "putch" для печати пустого пространства.

#include<stdio.h>
#include<conio.h>
main()
{
    int row,i,spc;
    for(row=1;row<=5;++row)
    {
        for(spc=5;spc>row;--spc)
        putch(" ");
        for(i=1;i<=row;++i)
        printf("%d",i);
        puts("\n");
    }
}

IИнтересно, что означает здесь «int», в то время как «» - это персонаж. Не так ли? Или я что-то упустил?

Ответы [ 3 ]

1 голос
/ 17 октября 2019

Интересно, что здесь означает «int», в то время как «» - это символ.

Ваш исходный код содержит " ", но ваш вопрос здесь содержит ' '. Вы должны понимать разницу: компьютеры не понимают, что вы имеете в виду. Если вы вводите кавычки, это означает что-то другое, чем если вы набираете апострофы.

Нет, ' ' не символ. В терминах стандарта C это целочисленная символьная константа . Его тип int.

" " является строковым литералом . Он задает статический массив 2 char, который инициализируется, чтобы содержать символ пробела и нулевой символ. При использовании в качестве аргумента вызова функции массив автоматически преобразуется в указатель на свой первый элемент. Следовательно, putchar(" ") пытается передать этот указатель на putchar, но putchar требует аргумента int.

0 голосов
/ 17 октября 2019

Для начала не используйте нестандартные функции C или макросы, такие как putch, и заголовки, такие как <conio.h>.

Вместо функции putch вы можете использовать стандартную функцию putchar.

Также в соответствии со стандартом C функция main без параметров должна быть объявлена ​​как

int main( void )

В этом вызове

putch(" ");

аргумент функции представляет собой строковый литерал, имеющий тип char[2] и определенный как

{ ' ', '\n' }

. Используемый в качестве аргумента, он неявно преобразуется вуказатель на его первый символ.

Это причина ошибки. Вместо передачи аргумента типа int, например

putch( ' ' );

, вы передаете аргумент типа char * из-за неявного преобразования строкового литерала в указатель.

Также попробуйтеобъявить переменные в области, где они используются. Иначе трудно читать программы с многочисленными объявлениями переменных в начале программы, потому что их цели неясны.

Вы можете вывести свой шаблон, используя только два цикла.

Вот демонстративныйПрограмма

#include <stdio.h>

int main(void) 
{
    while ( 1 )
    {
        printf( "Enter a non-negative number (0 - exit): " );

        int n;

        if ( scanf( "%d", &n ) != 1 || n <= 0 ) break;

        putchar( '\n' );

        for ( int i = 0; i < n; i++ )
        {
            int value = 1;
            printf( "%*d", n - i, value );

            while ( !( i < value++ ) ) printf( "%d", value );

            putchar( '\n' );
        }

        putchar( '\n' );
    }

    return 0;
}

Вывод может выглядеть как

Enter a non-negative number (0 - exit): 9

        1
       12
      123
     1234
    12345
   123456
  1234567
 12345678
123456789

Enter a non-negative number (0 - exit): 8

       1
      12
     123
    1234
   12345
  123456
 1234567
12345678

Enter a non-negative number (0 - exit): 7

      1
     12
    123
   1234
  12345
 123456
1234567

Enter a non-negative number (0 - exit): 6

     1
    12
   123
  1234
 12345
123456

Enter a non-negative number (0 - exit): 5

    1
   12
  123
 1234
12345

Enter a non-negative number (0 - exit): 4

   1
  12
 123
1234

Enter a non-negative number (0 - exit): 3

  1
 12
123

Enter a non-negative number (0 - exit): 2

 1
12

Enter a non-negative number (0 - exit): 1

1

Enter a non-negative number (0 - exit): 0
0 голосов
/ 17 октября 2019

Поскольку AlexP уже упоминалось в его комментарии, вам нужно использовать простое цитирование, например this :

char ch = ' ';

putch(ch)
...