我有一个接收一些标志的函数,并根据这些标志格式化要打印为输出的行。问题是,这些标志彼此独立。换句话说,输出的格式可以与这些标志的组合一样多。
有3个标志:bflag,nflag和sflag。如果bflag为1,则nflag被忽略。但是我们可以同时拥有b和s(或n和s),并且它们都以自己的方式操纵输出线。如何在不将所有可能性嵌套在if语句中的情况下进行处理(这是我能想到的唯一方法)?
以下是接收未格式化的字符串和标志的函数:
void outputLine(int *index, char buffer[], int bflag, int nflag){ //processes the options passed in the command line to create the output
if (nflag){
indexedLineout(index, buffer);
}
else if (bflag){
bprint(index, buffer);
}
else{//no options
printf("%s", buffer);
}
}
这是indexedLineout():
void indexedLineout(int *index, char buffer[]){//adds an index to the beginning of the line
printf ("%*d\t%s", 6, *index, buffer);
(*index)++;//increment the index
}
我认为显示bprint()并不重要,因为它与indexedLineOut()的行为非常相似。
如果我想添加上面提到的s标志,则如果先前的输出为空行,则基本上不会打印任何内容,并确保它也与其他标志一起工作,换句话说,请确保它可以打印编号的行,但不能打印相邻的空行,我该如何实现?
答案 0 :(得分:1)
有3个标志:bflag,nflag和sflag。如果bflag为1,则nflag为 隐瞒但是我们可以同时拥有b和s(或n和s),并且 两者都以自己的方式操纵输出线。我该如何处理 而不在if语句中嵌套所有可能性(我唯一的方法 可以想到)?
您具有由三个选项控制的两个单独的格式化功能,以一种相对干净的方式进行处理。您应该能够简单地遍历各行,并逐行进行遍历:
s
标志有效,然后跳过此行。否则,n
标志有效而b
无效,则打印行号,否则b
标志有效并且该行不是空白,则打印行号。我认为我什至没有将其分解为单独的功能,但是如果您这样做,我建议选择完全适合该方案的功能。