【问题标题】:remove a tab/ space in c program [closed]删除c程序中的制表符/空格[关闭]
【发布时间】:2013-11-14 13:14:44
【问题描述】:

我试图防止在每行输出的末尾打印一个尾随制表符。 我该怎么做?

其余代码按我的需要工作

#include <stdio.h>
int main()
{  
    int i, j, k, y, z, x, c, b, a, C;
    scanf("%d", &x);

    for(i=0; i<x; i++){
        for(j=0; j<x; j++){
            int c = 0;
            for(k=0; k<x; k++){

                y = (i+1)*(k+1);
                z = (j+k); 
                c = (z*y)+c;
            } 
            printf("%d\t", c);
        }
        printf("\n");
    }
}

【问题讨论】:

  • 投票结束:没有任何东西可以显示您实际上尝试过任何东西...即使是简单的谷歌搜索“C output tab new line” 会给你答案

标签: c tabs spaces


【解决方案1】:

\t\n 分别是制表符和换行符转义序列,所以改变

printf("%d\t", c);

printf("%d", c);

摆脱标签,并删除

printf("\n");

大家齐心协力,放松新线...简单
顺便说一句:你为​​什么要宣布第二个int c?您的代码以声明一堆 int 开头,其中一些您不使用:

int i, j, k, y, z, x, c, b, a, C;
                        //last 3 aren't used
                      //c declared here, though
//I'd write:
int i, j, k, y, z, x, c;

再往下:

//inside second loop:
int c = 0;
//would be better if wou wrote:
c = 0;

最后一点:您缺少return 语句,但您的main 函数签名表明(正确地)主函数应该返回一个int,而不是一个void。
在末尾添加return 0;

如果您想要避免打印的唯一内容是 last \n(和 \t),您可以更改:

printf("\n");

if (i < x-1) printf("\n");

这将打印 \n 每次,除了你的循环运行的 last 时间。仅仅因为循环运行的条件是i&lt;x,而要打印换行符的条件是i&lt;x-1
就您的标签而言,替换:

 printf("%d\t", c);

与:

if (j < x - 1) printf("%d\t", c);
else printf("%d", c);

满足您的需求。
也就是说,由于x 是一个常量值,最好将x-1 分配给其中一个未使用但已声明的整数:

scanf("%d", &x);
a = x -1;

然后,因为您正在检查何时使用此代码打印行的最后一个数字:

if (j < a) printf("%d\t", c);//replaced x - 1 with a here
else printf("%d", c);

您可以放心地假设else 子句仅适用于每行的最后一个数字,那么为什么不在此处添加换行符呢?

if (j < a) printf("%d\t", c);//replaced x - 1 with a here
else printf("%d\n", c);

总的来说,这会给您以下代码:

#include <stdio.h>
int main()
{  
    int i, j, k, y, z, x, c, a;
    scanf("%d", &x);
    a = x - 1;
    i = 0;
    for(i=0; i<x; i++){
        for(j=0; j<x; j++){
            c = 0;
            for(k=0; k<x; k++){
                y = (i+1)*(k+1);
                z = (j+k); 
                c = (z*y)+c;
            } 
            if (j < a) printf("%d\t", c);
            else printf("%d\n", c);
        }
    }
    return 0;//ADD A RETURN STATEMENT!!
}

这仍然会在最后一行输出之后添加一个新行。要删除它,也只需写:

if (j < a) printf("%d\t", c);
else if (i < a) printf("%d\n", c);//check if we're in the last i-loop
else printf("%d", c);//if so, don't print new line

工作完成...我试过这个代码and you can see the output on this codepad

【讨论】:

  • 我需要 Tab 和新行。但是在原始文件的最后,它会打印出来,我想删除它。删除最后一个
  • @user1465662:好的,现在我明白你的要求了。只是一条建议:“raw” 表示未加工的、未煮过的、粗制的、未完成的。而 "row" 表示一个序列,一种有序/结构化的格式。
【解决方案2】:

\t 表示制表符,\n 表示换行。这些被称为escape sequences

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-12-21
    • 2021-06-30
    • 2021-10-04
    • 1970-01-01
    • 2011-03-06
    • 2023-03-25
    • 2015-04-27
    相关资源
    最近更新 更多