c - 如何在一行中打印指定的char数

时间:2014-11-27 15:40:47

标签: c printf

我想打印类似如下的行:

====================================

我需要控制char的计数,并能够指定要打印的char。

我不想使用循环。

是否可以使用单个printf()语句执行此操作?


@Update

我问这个是因为我有时会以这种方式使用printf:

printf("%10s\n", "abc");

所以,如果printf可以做到这一点,那么它可以做我要求的事情,我只是不确定......现在我知道它不能......

好的,我写了一个简单的util函数来执行此操作:

#include <stdio.h>

void printRepeatChar(char c, int count) {
    char cs[count+1];
    int i;
    for(i=0; i<count; i++)
        cs[i] = c;
    cs[count] = '\0';
    printf("%s\n", cs);
}

int main(int argc, char * argv[]) {
    printRepeatChar('-', 6*4);
}

可能使用memset()中的string.h代替直接循环使代码缩短,就像在答案中一样。

并且,谢谢大家的帮助。

2 个答案:

答案 0 :(得分:3)

#include <stdio.h>
#include <string.h>

void PrintStuff( char to_print, int length ) {

    // adjust buffer size as desired
    char buffer[256];

    // -1 for null terminator
    if( length > sizeof(buffer)-1 ) length = sizeof(buffer)-1; 

    // fill buffer with desired character
    memset( buffer, to_print, length );

    // add null terminator
    buffer[length] = 0;

    // print to output
    puts( buffer );
}

int main() {
    PrintStuff( '=', 11 );
    return 0;
}

http://ideone.com/RjPr83


并回答子问题:不,printf不能重复字符作为格式规则。填充时只能重复空格或0。

答案 1 :(得分:2)

#include <stdio.h>
#include <string.h>
int main(void) {
    char c='=';
    char a[20];
    memset(a,c,(sizeof(a)-1));
    a[19] = '\0';
    printf("%s\n",a);
    return 0;
}

可以添加动态内存分配和字符扫描。