所以我有一个读取txt文件的程序。然后我用strtok使用&#34 ;;"来标记字符串。作为分隔符。问题是我必须水平格式化那些类似于SQL查询的标记。我唯一得到的是使标记垂直打印。我很困惑。
这是我的代码。 #define _CRT_SECURE_NO_DEPRECATE #包括 #include
int i, j;
FILE *fdin;
char *p;
char s_line[120];
char *token;
const char s[2] = ";";
int main()
{
if ((fdin = fopen("raw14.txt", "r")) == NULL)
return 1;
while (fgets(s_line, sizeof(s_line), fdin))
{
/*get first token */
token = strtok(s_line, s);
p = &s_line[strlen(s_line) - 1];
if (*p < ' ')
*p = '\0';
/*Loop for Serarating*/
while (token){
printf("Description")
printf(" %s\n", token);
token = strtok(NULL, s);
}
}
printf("\n\n");
return 0;
}
结果应如下所示:
项目ID描述数量平衡的数量
240201 AEROSIL | 253.50 231.00 | 22.50
240202 ALCOHOL | 663.00 412.78 | 250.22
txt部分就是这样:
240201; AEROSIL; 253.5; 231 240202;醇; 663; 412.78
请注意,我不知道如何创建额外的余额列,并且只将管道放在strtok上。我确实得到了我还应该使用左侧对齐并格式化printf以获得结果。
答案 0 :(得分:0)
我必须水平格式化这些令牌
那么为什么然后在每个令牌后打印换行符('\n'
)?
而不是
while (token) {
printf("Description")
printf(" %s\n", token);
token = strtok(NULL, s);
}
你可以做
while (token) {
printf("Description")
printf(" %s", token);
token = strtok(NULL, s);
}
printf("\n");
答案 1 :(得分:0)
你的printf中有一个\ n(换行符),因此每个标记都印在自己的行上。
更改此
while (token){
printf("Description")
printf(" %s\n", token);
token = strtok(NULL, s);
}
到这个
while (token) {
printf(" %s", token);
token = strtok(NULL, s);
}
printf("\n"); // Put the newline character outside the loop.
您还应该在外部循环外打印Description ID BALANCE文本。
答案 2 :(得分:0)
每次打印令牌时都会打印一个新行。
如果您希望它们像CHOCOLATE 1 4
一样打印,只需在循环中使用printf("%s ", token);
即可。而且你也不应该在循环中打印Description。