3

我想出了一个我认为是一个尴尬(尽管是标准)问题的混乱解决方案:对于给定的用户输入,反转单词的字母

例如:

这是一个标准测试

变成

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。

4

2 回答 2

5

好吧,你的情况在这里矛盾:

 if (user_input[x]==' ')
            {
            puts("second level test");
            for (i=x; user_input[i]!=' '; --i)

您只输入 if user_input[x]is space,但只要它不等于空格,您就会循环。

于 2012-12-19T21:36:18.813 回答
2

问题是这部分:

 if (user_input[x]==' ')
            {
            puts("second level test");
            for (i=x; user_input[i]!=' '; --i)
                {               

在第一行中,您已经确定了user_input[x]==' '.

几行之后,您设置了一个将运行 while 的循环user_input[i]!=' '

但是,您已经设置i = x了……因此,在第一遍中,您要求user_input[x]!=' '……您已经确定它是错误的。

因此,内部循环永远不会运行。

于 2012-12-19T21:37:16.117 回答