鱼C论坛

 找回密码
 立即注册
查看: 5156|回复: 8

%6d ,%6c,字符串问题

[复制链接]
发表于 2015-8-22 21:36:37 | 显示全部楼层 |阅读模式
50鱼币
亲爱的各位鱼油:

<1>请问%-6d   %6d   %-6c   %6c   是什么意思------------百度上查的看不懂,请详细解释。^-^
m.PNG

<2>请问怎样输入和输出字符串?------------记得小甲鱼的视频里有这样一道加密的题目。请给出详细解答。^-^
加密.PNG

最佳答案

查看完整内容

1:%6d可以理解为这个数字在不超过 6 位时,输出它要占 6位,默认以 空格符 填满。且为右对齐(+)。我们还可以改变默认的填充字符,比如 %06d, 表示不足 6位 时以 0 填充。这只在 右对齐的情况下有用。如果是 %-6d 则只能默认 以空格符占 6位。不能够改变默认填充字符。(因为会使得输出字符值发生视觉改变) 2:scanf("%s", buf); // 该函数从接收第一个不为 空格或者Enter 的值开始,到空格或者Enter结束,对应printf("%s", b ...
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-8-22 21:36:38 | 显示全部楼层
1:%6d可以理解为这个数字在不超过 6 位时,输出它要占 6位,默认以 空格符 填满。且为右对齐(+)。我们还可以改变默认的填充字符,比如 %06d, 表示不足 6位 时以 0 填充。这只在 右对齐的情况下有用。如果是 %-6d 则只能默认 以空格符占 6位。不能够改变默认填充字符。(因为会使得输出字符值发生视觉改变)
  1. #include <stdio.h>

  2. int main(){
  3.     int a = 123;
  4.     printf("%06d", a);
  5.     printf("%c", 'a');
  6.     return 0;
  7. }
复制代码

2:scanf("%s", buf); // 该函数从接收第一个不为 空格或者Enter 的值开始,到空格或者Enter结束,对应printf("%s", buf)
gets(buf); //该函数从一开始接收任一字符,到Enter键结束,中间可接收 空格。对应 puts(buf);但本身很不安全(不进行边界检查)。
fgets()可以解决上面两个函数的问题,fget(tempstr,10,stdin)tempstr是用来接收字符串的变量,10是变量长度(可以自己定义),stdin是标准输入(键盘输入)。此函数完美解决以上问题,但此函数会有一点小问题,fget()函数接收的字符串是以/n结尾的,这与平时用的/0结尾的字符串有点不同,会有兼容性问题。
  1. //scanf("%s",buf); 版,对应其他版本可用相应的函数 gets(buf);,fgets(buf,1000,stdin);做相应的改动即可。
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <string.h>

  5. void encryption(char buf[], int len){
  6.     int i;
  7.     for ( i = 0; i < len; i++ ){
  8.         if( buf[i] >= 'A' && buf[i] <= 'Z' ){
  9.             buf[i] = (buf[i] - 65 + 4) % 26 + 65; //加减去 65 是为了 将 'A' 与 零等同。
  10.         }
  11.         else if( buf[i] >= 'a' && buf[i] <= 'z'){
  12.             buf[i] = (buf[i] - 97 + 4) % 26 + 97; //'a' <==> 0
  13.         }
  14.     }
  15.     printf( "对应的密文是:%s\n",buf );
  16. }

  17. void deciphering( char buf[], int len ){
  18.     int i;
  19.     for ( i = 0; i < len; i++ ){
  20.         if( buf[i] >= 'A' && buf[i] <= 'Z' ){
  21.             buf[i] = (buf[i] - 65 - 4 + 26) % 26 + 65; //再加 26 是为了 'A'->'W' 的情况。
  22.         }
  23.         else if( buf[i] >= 'a' && buf[i] <= 'z' ){
  24.             buf[i] = (buf[i] - 97 - 4 + 26) % 26 + 97; //同上。
  25.         }
  26.     }
  27.     printf("对应的原文是:%s\n",buf);
  28. }

  29. int main( ){
  30.     char buf[1000];
  31.     char choice[10];
  32.     int len = 0;

  33.     printf("\t1,请输入原文译成密码\n");
  34.     printf("\t2,请输入密码译成原文\n");
  35.     printf("请输入您的选择:");
  36.     while( 1 ){
  37.         scanf("%s", choice);
  38.         if( strlen(choice) == 1 && (choice[0] == '1' || choice[0] == '2') ) break;
  39.         printf("您的输入有误,请重新输入:");
  40.     }

  41.     if (choice[0] == '1'){
  42.         printf("请输入原文:");
  43.         scanf("%s", buf);
  44.         len = strlen(buf);
  45.         encryption(buf, len); //该函数中只对英文字符处理,其他字符不做处理。
  46.     }
  47.     else {
  48.         printf("请输入密文:");
  49.         scanf("%s", buf);
  50.         len = strlen(buf);
  51.         deciphering(buf, len); //同上。
  52.     }

  53.     return 0;
  54. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-8-22 23:49:07 | 显示全部楼层
第一个问题6d表示输出整数占6个字符宽,比如
  1. printf("%-6d",10);
复制代码

输出的结果是----10(-表示空格)默认右对齐,就是那个数在最右边。-6d就是数字靠在最左边
输出结果10----
第二个问题详细答案看这里http://www.cnblogs.com/emanlee/archive/2008/04/17/1158403.html
他是移动三个,移动四个道理一样。其中一种方法关键的代码就是
  1. s[i]=(s[i]-65+3)%26+65;//移动4个就把3改成4
复制代码

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-8-23 10:08:50 | 显示全部楼层
第一个我不知道怎么说,我把第二个题目自己打了下,希望对你有帮助
#include<stdio.h>
void main()
{
        char ch;
                printf("please getchar :  \n");
                while((ch=getchar())!='\n')
                {
                if(87<=ch&&90>=ch||119<=ch&&112>=ch)
                        ch=ch-22;
                else
                        ch=ch+4;
                printf("%c",ch);
                }
                printf("\n");

}

评分

参与人数 1荣誉 +5 鱼币 +5 贡献 +3 收起 理由
Michael-Bern + 5 + 5 + 3 非常感谢你的第二题!

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-8-24 15:56:10 | 显示全部楼层
楼上说的好详细,想赚个鱼币怎么这么难

评分

参与人数 1荣誉 -5 鱼币 -5 贡献 -3 收起 理由
Michael-Bern -5 -5 -3

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-8-27 13:40:33 From FishC Mobile | 显示全部楼层
(1)%-6d代表6个字节长度,并且左对齐,例如。。。123
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-8-27 20:02:19 | 显示全部楼层
学习啦!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-9-23 19:57:41 | 显示全部楼层
我是来领鱼币的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-10-12 16:34:45 | 显示全部楼层
学习啦!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-20 10:39

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表