提问人:user27665 提问时间:10/20/2022 更新时间:10/21/2022 访问量:256
在 c++ 中使用 fprintf 时如何删除行尾的尾随空格
How to remove the trailing space at the end of a line when using fprintf in c++
问:
我正在尝试在不使用换行符的情况下写入一组从 1 到 640(固定宽度 = 8)的整数。当我滚动每一行(以 row1 为例)时,行尾还剩一个空格(固定宽度 = 8),如图所示。当游标从一个整数的开头移动到下一个整数的开头时,列值将递增 8。
我需要光标在该行中的最后一个整数(即第一行中的 16)被交叉后立即跳转到下一行(即没有图像中的额外空间)。我还需要列值在下一行的开头仍应递增 8。也就是说,整数 16 之前的列值应该是 15X8+1=121,整数 16 之后应该是 15X8+3=123,然后光标应该跳到下一行,显示列值 16X8 + 1=129。
我的代码在图像下方。(光标的列值显示在 gedit 或其他文本编辑器的右下角)
#include <iostream> // std::cout, std::endl
#include <iomanip> // std::setw
#include <stdio.h>
#include <stdlib.h>
int main () {
FILE * fp;
fp = fopen ("file.txt", "w+");
int n=640;
for(int i = 1; i <= n; i++)
{
fprintf(fp, "%-8d", i);
}
fclose(fp);
return 0;
}
答:
0赞
BingShan Wang
10/20/2022
#1
这很简单,你需要添加一个法官。
#include <iostream> // std::cout, std::endl
#include <iomanip> // std::setw
#include <stdio.h>
#include <stdlib.h>
int main () {
FILE * fp;
fp = fopen ("file.txt", "w+");
int n=640;
for(int i = 1; i <= n; i++)
{
fprintf(fp, "%d ", i); //fix printf
if(i % 8 == 0){ //add a if judge
fprintf(fp,"\n");
}
}
fclose(fp);
return 0;
}
评论
0赞
j6t
10/20/2022
数字之间没有任何空格......
0赞
BingShan Wang
10/21/2022
呵呵,这是一个错误。你很好!
0赞
j6t
10/21/2022
但是现在您在换行符之前确实有一个空白。这难道不是OP最初的问题吗?
0赞
Sebastian
10/21/2022
问题在于 OP 希望将每个数据列的文本文件列值递增 8(因此每列必须有 8 个字符的宽度),并且在显式或隐式换行符之后,列号不应再次从 1 开始。
0赞
BingShan Wang
1/18/2023
@Sebastian这个开始 1 意味着每 8 秒是一行。(1 <= 640) , 640 / 8 = 80 .这是对的兄弟,为什么应该从 1 开始??因为 “ 0%8 ==0 ” 这个东西会抓住一个错误,即一行将 fprintf 一个 '\n'
评论
if (i>1) print a space
%d
-8
\n
640
<= n
n = 640