【发布时间】:2012-05-06 16:22:27
【问题描述】:
我正在做一些作业,想知道是否有太多嵌套的 while 循环之类的东西。嵌套几个while循环有缺点吗?如果是这样,如何重构我下面的代码 sn-p?
下面是一次读取一行文件,解析由一些定义的分隔符分隔的字段,并在打印到控制台之前删除前导空格的代码。
// Read the file one line at a time
while (fgets(lineStr, MAXLINELENGTH, fp) != NULL)
{
charPtr = strtok(lineStr, DELIMITERS);
// Loop until line is parsed
while (charPtr != NULL)
{
// Skip past leading whitespace
while (isspace(*charPtr))
charPtr++;
puts(charPtr);
charPtr = strtok(NULL, DELIMITERS);
}
}
【问题讨论】:
-
不,嵌套循环没有问题。
-
虽然,您可能希望将其中一些封装到反映它们正在做什么的方法中——最后一个变成
skipSpaces(),或类似的。 -
如果输入可以包含负字符(值大于 127),您可能需要将参数转换为
isspace以避免未定义的行为:isspace((unsigned char)*charPtr)跨度> -
深度嵌套可能表明您应该重构以将事物拆分为不同的功能。例如,你可以有一个函数来解析一行,然后一个函数去除空白,一个标记化,等等。是的,这可能意味着多次通过缓冲区,但如果它不是性能关键用例,更简洁的模块化代码更好。
标签: c while-loop nested-loops