C - putch 参数从指针生成整数而不进行强制转换



在我的以下程序中,如果我使用"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

相关内容

  • 没有找到相关文章

最新更新