【发布时间】:2020-10-03 03:50:42
【问题描述】:
我正在尝试从用户那里读取多行输入。我下面的代码运行良好,但我的教授只允许我们在 switch 语句中使用“break”。这是我的以下功能:
void getaddress (char address [ ], int limit)
{
int len = 0;
while(fgets(address+len, limit, stdin))
{
if(strlen(address+len) == 1)
break;
limit = strlen(address);
limit = limit - len;
if(limit <= 0)
break;
}
}
【问题讨论】:
-
if (address[len] == '\n') goto done;然后在循环done:;的}之后。 (检查'\n'会单独捕获Enter 作为fgets()的输入)如果您使用strlen(address+len) == 1检查其他条件,则可以使用它。 -
while (limit > 0 && fgets(…) != NULL) { … },注意不要像现在这样破坏limit。您的循环体需要以不同的方式计算新的限制。 -
看来
limit = strlen(address);应该是len = strlen(address);——否则limit是——每次迭代都会改变:) -
将其与您的阅读限制相结合,以保护您的
limit@chux 在他的回答中显示,您将拥有一个可靠的例程。 -
Joana F.,缓冲区大小是否为 100,并且有 3 个长度为 40、40、40 的输入行,最后一行应该部分保存、丢失还是什么?
标签: c