在C编程中有运行时错误:(

时间:2014-12-05 10:02:44

标签: c

我的朋友和我写了一个C代码,我们给它一个反向句子,它为我们打印一个常规句子。我们必须将此代码上传到服务器,并使用一些测试用例检查我们的代码并给我们分数。但在某些测试用例中,它表示我们的代码存在运行时错误,我们必须缩短代码。另一个问题是当我们使用?!之类的书写标记时,我们的程序不能正常工作。

示例输入:oD uoy tnaw ot eunitnoc?

输出(我们想要):Do you want to continue?

输出显示:Do you want to ?continue

您能否帮助我们缩短此代码并解决此问题?

谢谢。

我们的代码是:

#include <stdio.h>
#include <ctype.h>

int main()
{
   char sentence[100];
   int ch, i, j, k;

   for (i = 0; (sentence[i] = getchar()) != '\n'; i++)
   {
       ;
   }
   sentence[i] = '\0';

   for (j = 0; j <=i; j++)
   {
           if (sentence[j] == ' ' || sentence[j] == '\0')
           {
                   for (k = j-1; sentence[k] != ' ' && k >= 0; k--)
                   {
                       ch=sentence[k];
                       putchar(ch);
                   }
                   printf(" ");  
           }

   }
   return 0;
}

1 个答案:

答案 0 :(得分:1)

代码正在处理&#34; eunitnoc?&#34;所有这些都是一个字,因此打印出来&#34;?继续&#34;。你可以通过不一直到最后一个字符来缩短循环,这不应该包含在最后一个字中。

至于缩短代码的长度:为什么不删除更改最终代码的行?&#39; \ n&#39;到&#39; \ 0&#39; (并相应地改变逻辑)。这将缩短代码。你关心减少行数吗?你可以删除一些空格。

例如,像这样,应该做你想做的事情:

#include <stdio.h>
#include <ctype.h>
int main()
{
    char sentence[100];
    int ch, i, j, k;
    for (i=0; (sentence[i]=getchar())!='\n';i++){;}
    for (j=0;j<=i;j++)
    {
        if (j==i)
        {
            putchar(sentence[j-1]);
        }
        else if (sentence[j]==' ' || j==i-1)
        {
            for (k=j-1;sentence[k]!=' ' && k>=0;k--)
            {
                ch=sentence[k];
                putchar(ch);
            }
            if(j!=i-1)printf(" ");
        }
    }
    return 0;
}