0

我有一个简单的 C++ 程序,它读取stdinusingscanf并将结果返回到stdoutusing printf


#include <iostream>
using namespace std;

int main()
{
    int n, x;
    int f=0, s=0, t=0;

    scanf("%d",&n); scanf("%d",&x);

    for(int index=0; index<n; index++)
    {
        scanf("%d",&f);
        scanf("%d",&s);
        scanf("%d",&t);

        if(x < f)
        {
            printf("first\n");
        }
        else if(x<s)
        {
            printf("second\n");
        }
        else if(x<t)
        {
            printf("third\n");
        }
        else
        {
            printf("empty\n");
        }
    }

    return 0;
}

我正在用 g++ 编译并在 linux 下运行。我使用文本文件作为输入执行程序,并将输出通过管道传输到另一个文本文件,如下所示:

程序 <in.txt> out.txt

问题是 out.txt 看起来像这样:

结果1_
结果2_ 结果
3_
...

其中 '_' 是每行末尾的额外空格。我正在 gedit 中查看 out.txt。

如何在没有额外空间的情况下产生输出?

我的输入文件如下所示:

2 123
123 123 123
123 234 212

编辑:我能够找到解决此问题的方法:printf("\rfoo"); 感谢您的输入!

4

8 回答 8

2

行尾字符是:

System  Hex     Value   Type
Mac     0D      13      CR
DOS     0D 0A   13 10   CR LF
Unix    0A      10      LF 

对于每个系统上的行尾,您可以:

printf("%c", 13);
printf("%c%c", 13, 10);
printf("%c", 10);

你可以像这样使用它

printf("empty");
printf("%c", 10);

维基百科换行文章在这里。

于 2008-12-08T21:45:17.213 回答
2

printf()尝试从您的语句中删除“\n” ,然后再次运行代码。如果输出文件看起来像一个长单词(没有空格),那么您知道在文本之后插入的唯一内容是 '\n'。

我假设您用来读取 out.txt 文件的编辑器只是让它看起来在输出之后有一个额外的空间。

如果还是不确定,可以编写一个快速程序读入 out.txt 并确定每个字符的 ASCII 码。

于 2008-12-08T21:45:21.537 回答
1

好的,这有点难以弄清楚,因为示例程序有很多错误:

g++ -o example example.cc
example.cc: In function 'int main()':
example.cc:19: error: 'k' was not declared in this scope
example.cc:22: error: 'o' was not declared in this scope
example.cc:24: error: 'd' was not declared in this scope
make: *** [example] Error 1

但这不会是您的输入文件;您的 scanf 将加载您在ints 中输入的任何内容。这个例子,虽然:

/* scan -- try scanf */
#include <stdio.h>

int main(){
    int n ;
    (void) scanf("%d",&n);
    printf("%d\n", n);
    return 0;
}

产生了这个结果:

bash $ ./scan | od -c
42
0000000    4   2  \n                                                    
0000003

在 Mac OS/X 上。给我们一份您实际运行的代码的副本,以及 od -c 的结果。

于 2008-12-08T21:56:51.123 回答
0

正如 timhon 所问的,这里需要更多信息,您在哪个环境下工作?Linux、Windows、Mac?另外,您使用的是什么文本编辑器来显示这些额外的空格?

于 2008-12-08T21:39:28.130 回答
0

我的猜测是你的空间并不是真正的空间。跑

od -hc out.txt

仔细检查它是否真的是一个空间。

于 2008-12-08T21:41:30.093 回答
0

首先,您提供的代码示例未编译为 o 和 d 未定义...

其次,您可能在从输入文件中读取的行的末尾有空格。试试用vi打开看看。否则,您可以在输出之前在每一行上调用一个修剪函数并完成它。

祝你好运!

于 2008-12-08T21:46:16.683 回答
0

确保您正在查看您期望的程序的输出;这有一个语法错误(没有“;”之后int n)。

于 2008-12-08T21:46:40.410 回答
0

我觉得它甚至不接近这个,但如果你在 Windows 上运行它,你会得到 \r\n 作为行终止符,并且,也许,在 *nix 下,在非 Windows 感知的文本编辑器下,你'将得到 \r 作为公共空格,因为 \r 不可打印。

远射,最好的测试方法是使用十六进制编辑器并自己查看文件。

于 2009-07-01T03:52:26.017 回答