【发布时间】:2012-12-07 08:20:40
【问题描述】:
对于一个尴尬(尽管是标准的)问题,我想出了一个我认为是混乱的解决方案: 对于给定的用户输入,反转单词的字母
例如:
这是一个标准测试
变成
sihT si a dradnats tset
而不是
tset dradnats a si sihT
问题的核心是这段代码
while (!iscntrl(user_input[x])) // quit when new line is read
{
restart:
x++;
puts("first level test");
if (user_input[x]==' ')
{
puts("second level test");
for (i=x; user_input[i]!=' '; --i)
{
reverse_words[k]=user_input[i];
k++;
puts("third level test");
goto restart;
}
}
}
(是的,我知道,那里有一个 goto :/)
但循环的第三层从未被触及。
想必(i=x; user_input[i]!=' '; --i)作为for循环参数有什么问题?
x、i 和 k 在第一个循环开始之前都被初始化为整数 == 0。
【问题讨论】:
-
将反转逻辑分解为函数可能会使此类问题更易于调试。
标签: c for-loop nested-loops