在我的以下程序中,如果我使用"putch"打印空格,我会收到一个错误,即"传递'putch'的参数 1 会使指针成为没有强制转换的整数"。
#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");
}
}
我想知道这里的"int"是什么意思,而"是一个字符。不是吗? 还是我错过了什么?
我想知道这里的"int"是什么意思,而''是一个字符。
您的源代码包含" "
,但您在此处的问题包含' '
。你应该意识到区别:计算机不会直觉你的意思。如果键入引号,则含义与键入撇号的含义不同。
不,' '
不是一个角色。在 C 标准的术语中,它是一个整数字符常量。它的类型是int
.
" "
是字符串文本。它指定一个 2char
的静态数组,该数组被初始化为包含空格字符和空字符。当用作函数调用的参数时,数组会自动转换为指向其第一个元素的指针。因此putchar(" ")
尝试将此指针传递给putchar
,但putchar
需要一个int
参数。
正如 AlexP 在他的评论中已经提到的,你需要使用这样的简单引用:
char ch = ' ';
putch(ch)
对于初学者来说,不要使用非标准的 C 函数或宏(如putch
(和标头(如<conio.h>
(。
您可以使用标准函数putchar
代替函数putch
。
同样根据 C 标准,不带参数的函数 main 应声明为
int main( void )
在此通话中
putch(" ");
函数参数是一个字符串文本,其类型为char[2]
并定义如下
{ ' ', 'n' }
用作参数,它被隐式转换为指向其第一个字符的指针。
这是错误的原因。而不是传递像 int 这样的 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