A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

© 余丽丽 高级黑马   /  2015-6-6 13:16  /  4443 人查看  /  30 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 余丽丽 于 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这部分无论在哪里加空格,对齐效果都是正常的,唯有没有加空格的时候就出现第一种现象;
请问是什么原因?




30 个回复

正序浏览
正常情况下,加一个制表符"\t"就可以了
回复 使用道具 举报
lipeng524824 来自手机 中级黑马 2015-6-16 00:06:37
30#
围观,学习!
回复 使用道具 举报
没区别吧
回复 使用道具 举报
看看这个
  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. }
复制代码
回复 使用道具 举报
printf中双引号里的内容是原样输出的。。
回复 使用道具 举报
理论上应该是一样的
回复 使用道具 举报
goldboy 来自手机 中级黑马 2015-6-14 08:46:01
25#
99乘法是经典编程题,得好好看看
回复 使用道具 举报
不过后来我还是走出来了,只不过你纵向两数字写反了
printf("%d * %d = %d \t", j, i, i*j);这样试试打印出来序列应该就是正确了吧
回复 使用道具 举报
瞬间发现你是咱班大神,这题我捣鼓了许久都没弄出来,还不如你,丢脸啊:L
回复 使用道具 举报
围观学习
回复 使用道具 举报
李竞还活着 发表于 2015-6-11 00:02
我怎么感觉这没有问题嘞

代码是没有问题,版本问题
回复 使用道具 举报
我怎么感觉这没有问题嘞
回复 使用道具 举报
Emma 发表于 2015-6-9 22:59
因为\t的意思就是跳到4k+1的位置输出啊,\t就是从行头开始第5个字符开始输出,\t\t就是第9个 ...

这个我知道,应该是版本的问题吧,6.3.1.版本运行着没有问题
回复 使用道具 举报
在我这运行没有问题。
回复 使用道具 举报
/t的原因吧
回复 使用道具 举报
因为\t的意思就是跳到4k+1的位置输出啊,\t就是从行头开始第5个字符开始输出,\t\t就是第9个
回复 使用道具 举报
可能是xcode的原因吧
回复 使用道具 举报
我又来围观学习啦
回复 使用道具 举报
余丽丽 发表于 2015-6-6 22:40
我是6.3.2版本,你呢?

我是DEV C++
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马