通过在c中迭代来打印字符


#include <stdio.h>
void fun(char *p) {
if (p) {
printf("%c", *p);
p++;    
}
}
int main() {
fun("Y32Y567");
return 0;
}

输出:Y

预期输出:Y32Y567

我的问题是为什么它没有按预期的方式工作?

如果函数fun进入if,它只打印一个字符。您可能打算使用while循环,而不是单个if条件。此外,您的条件是错误的——只要不是NULLp就计算为true thy,如果您传递字符串文字,则不会发生这种情况。您可能想测试*p,即字符p指向:

void fun(char* p)
{
while (*p) /* Here */
{
printf("%c",*p);
p++;    
}
}

如果传递的指针p不等于NULL,则函数只输出一个字符,因为函数中没有任何循环。该函数只包含检查指针p的if语句。

void fun(char* p)
{
if(p)
{
printf("%c",*p);
p++;    
}
}

您需要一个循环来输出指向字符串的字符。

但对于初学者来说,函数参数应该具有限定符const,因为指向的字符串在函数中不会更改。

的功能如下

void fun( const char* p)
{
if ( p )
{
while ( *p ) putchar( *p++ );
}
}

但是,如果函数有第二个指定文件的参数,那么它将更通用。例如

FILE * fun( const char* p, FILE *fp )
{
if ( p )
{
while ( *p ) fputc( *p++, fp );
}
return fp;
}

在这种情况下,您可以在文件中输出字符串。

这是一个演示程序

#include <stdio.h>
FILE * fun( const char* p, FILE *fp )
{
if ( p )
{
while ( *p ) fputc( *p++, fp );
}
return fp;
}
int main(void) 
{
fputc( 'n', fun( "Y32Y567", stdout ) );

return 0;
}

当然,您可以将字符串作为一个整体输出,而不需要使用一条语句进行循环。例如

#include <stdio.h>
FILE * fun( const char* p, FILE *fp )
{
if ( p )
{
fputs( p, fp );
}
return fp;
}
int main(void) 
{
fputc( 'n', fun( "Y32Y567", stdout ) );

return 0;
}

相关内容

  • 没有找到相关文章

最新更新