C语言中将字符串打印成指定长度的方法

如题所述

好用的扩展就是 scanf() 的“%ms”占位符

介于 % 和 s 之间的 m 有 measure(测量)的含义,它可以测量输入字符串的长度,scanf() 根据字符串的长度分配内存,并将字符串拷贝到这段内存,之后将首地址返回给 m。在使用完毕后,需要调用 free() 函数释放这段内存。

程序源代码如下:

#include<stdio.h>

int length(char *p);

void main()

{

int len;

char *str[20];

printf("please input a string:\n");

scanf("%s",str);

len=length(str);

printf("the string has %d characters.",len);

}

int length(char *p)

{

int n;

n=0;

while(*p!='\0')

{

n++;

p++;

}

return n;

}

扩展资料

1、在C语言程序开发中需要读取用户输入时,即使不能事先获知输入长度,也是有办法写出高稳定性的程序的。不过在实践中,一般不推荐使用 scanf() 函数处理用户输入,即使我们解决了输入长度的问题。

2、介于 % 和 s 之间的数字应小于 name 的长度,这个数字表示 scanf() 一次最多读取 127 字节的数据放入 name。如果用户输入的字符串超出了 127 字节,剩下的字符将留在缓冲区内,等待下一次读取。

温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2018-02-27

C语言中使用printf函数的输出字符串格式控制,可以很方便的将字符串按设计者要求进行输出。

格式说明:

printf("%[m][.n]s", str ); 

中括号,表示可选项,不是格式内容

m   输出最小宽度,单位字节,若str长度不足m,前补空格

.n   仅输出字符串str的前n位

参考代码:

#include<stdio.h>
int main()
{
    char s[]="abcdef";
    printf("1234567890\n");
    printf("%8.0s\n", s );
    printf("%8.3s\n", s );
    printf("%8.5s\n", s );
    printf("%8.9s\n", s );
    return 0;
}

运行结果:

1234567890
        
     abc
   abcde
  abcdef

本回答被网友采纳
第2个回答  推荐于2017-11-25
如果要按表格形式打印一组字符串,你就需要将字符串打印成指定长度。利用printf()函数可以很方便地实现这一点,请看下例:
# include <stdio. h>
char * data[25] = {
"REGION", "--Q1--", "--Q2--", "--Q3--", "--Q4--",
"North" , "10090. 50" , "12200. 10" , "26653.12" , "62634. 32" ,
"South", "21662.37", "95843.23", "23788.23", "48279.28",
"East", "23889.38", "23789.05", "89432.84", "29874.48",
"West", "85933.82", "74373.23", "78457.23", "28799.84" };
void main (void) ;
void main (void)
{
int x;
fox (x = 0, x<25; x+ + )
{
if ((x % 5) == 0&&(x !=0))
printf("\n");
printf (" %-10. 10s" , data[x]) ;
}
}

在上例中,字符串数组char *data[]中包含了某年4个地区的销售数据。显然,你会要求按表格形式打印这些数据,而不是一个挨一个地毫无格式地打印这些数据。因此,上例中用下述语句来打印这些数据:
printf("%-10.10s",data[x]);
参数"%-10.10s"指示printf()函数按10个字符的长度打印一个字符串。在缺省情况下,printf()函数按右对齐格式打印字符串,但是,在第一个10的前面加上减号(-)后,prinft()函数,就会使字符串左对齐。为此,printf()函数会在字符串的尾部加入空格,以使其长度达到10个字符。上例的打印输出非常整洁,类似于一张表格,如下所示:
REGION --Q1-- --Q2-- --Q3-- --Q4--
North 10090.50 12200.10 26653.12 62634.32
SOuth 21662.37 95843.23 23788.23 48279.28
East 23889.38 23789.05 89432.84 29874.48
West 85933.82 74373.23 78457.23 28799.84本回答被网友采纳
相似回答