黑马程序员技术交流社区

标题: 99乘法表的对齐问题 [打印本页]

作者: 余丽丽    时间: 2015-6-6 13:16
标题: 99乘法表的对齐问题
本帖最后由 余丽丽 于 2015-6-6 22:40 编辑

我自己试着写了以下99乘法表,但是我无意中发现一个问题,不知道是什么原理,刚开始的写法:

#include <stdio.h>

int main(int argc, const char * argv[]) {
    for (int i=1; i<10; i++) {
        for (int j=1; j<i+1; j++) {
            printf("%d*%d=%d\t",i,j,i*j);
        }
        printf("\n");
    }
    return 0;
}
运行结果:



后来改成:
#include <stdio.h>

int main(int argc, const char * argv[]) {
    for (int i=1; i<10; i++) {
        for (int j=1; j<i+1; j++) {
            printf("%d*%d=%d \t",i,j,i*j);
        }
        printf("\n");
    }
    return 0;
}

运行结果:



其实这两种写法只是printf("%d*%d=%d\t",i,j,i*j);改成printf("%d*%d=%d \t",i,j,i*j);而已;
后来我多次测试发现%d*%d=%d\t这部分无论在哪里加空格,对齐效果都是正常的,唯有没有加空格的时候就出现第一种现象;
请问是什么原因?





作者: talent123    时间: 2015-6-6 21:36
我用你的第一种写法
运行出来的也是正确的啊
作者: hi虚无缥缈    时间: 2015-6-6 22:36
看不出来这两种写法有什么不同.
作者: 余丽丽    时间: 2015-6-6 22:40
talent123 发表于 2015-6-6 21:36
我用你的第一种写法
运行出来的也是正确的啊

我是6.3.2版本,你呢?
作者: ⒈苆都s.兲憶    时间: 2015-6-6 23:32
第一种也是正确的吧,没看出来哪有问题!
作者: 七尺阳光    时间: 2015-6-6 23:38
这个对齐跟空格没有关系啊.奇葩的问题
作者: 恩赐_RWQqZ    时间: 2015-6-6 23:58
哦哦哦  好 非常好 很好
作者: 晗修    时间: 2015-6-7 02:00
应该是\t的原因吧 制表符不一定会产生空格的
作者: taolove    时间: 2015-6-7 08:09
我运行的没有这个问题!
作者: 天下1083    时间: 2015-6-7 08:10
一样的吧
作者: 小龙女的萝卜    时间: 2015-6-7 08:11
不懂,两个不是看着一样吗?应该没问题吧
作者: aofex    时间: 2015-6-7 19:58
新手  看不出来啊
作者: talent123    时间: 2015-6-7 20:28
余丽丽 发表于 2015-6-6 22:40
我是6.3.2版本,你呢?

我是DEV C++

作者: 这是829    时间: 2015-6-7 21:45
我又来围观学习啦
作者: huyingbin    时间: 2015-6-7 23:51
可能是xcode的原因吧
作者: Emma    时间: 2015-6-9 22:59
因为\t的意思就是跳到4k+1的位置输出啊,\t就是从行头开始第5个字符开始输出,\t\t就是第9个
作者: 天下1083    时间: 2015-6-10 11:34
/t的原因吧
作者: 苗美丽    时间: 2015-6-10 22:43
在我这运行没有问题。
作者: 余丽丽    时间: 2015-6-10 22:45
Emma 发表于 2015-6-9 22:59
因为\t的意思就是跳到4k+1的位置输出啊,\t就是从行头开始第5个字符开始输出,\t\t就是第9个 ...

这个我知道,应该是版本的问题吧,6.3.1.版本运行着没有问题
作者: 李竞还活着    时间: 2015-6-11 00:02
我怎么感觉这没有问题嘞
作者: 余丽丽    时间: 2015-6-11 00:43
李竞还活着 发表于 2015-6-11 00:02
我怎么感觉这没有问题嘞

代码是没有问题,版本问题
作者: 马贺飞    时间: 2015-6-13 22:56
围观学习
作者: 皇道金丹    时间: 2015-6-14 01:52
瞬间发现你是咱班大神,这题我捣鼓了许久都没弄出来,还不如你,丢脸啊:L
作者: 皇道金丹    时间: 2015-6-14 02:00
不过后来我还是走出来了,只不过你纵向两数字写反了
printf("%d * %d = %d \t", j, i, i*j);这样试试打印出来序列应该就是正确了吧

作者: goldboy    时间: 2015-6-14 08:46
99乘法是经典编程题,得好好看看
作者: 我丶就这样    时间: 2015-6-15 19:03
理论上应该是一样的
作者: 丁铭检    时间: 2015-6-15 20:26
printf中双引号里的内容是原样输出的。。
作者: 小小羊    时间: 2015-6-15 23:37
看看这个
  1. #include<stdio.h>

  2. int main()
  3. {
  4.     int x,y,z;
  5.     for(x=1;x<=9;x++)
  6.     {
  7.         for(y=1;y<=x;y++)
  8.         {
  9.             z=x*y;
  10.             printf("%d*%d=%-2d  ",y,x,z);
  11.         }
  12.         printf("\n");
  13.     }
  14.     return 0;
  15. }
复制代码

作者: 毓秀钟灵    时间: 2015-6-16 00:00
没区别吧
作者: lipeng524824    时间: 2015-6-16 00:06
围观,学习!
作者: ITClody    时间: 2015-6-16 13:44
正常情况下,加一个制表符"\t"就可以了




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2