运行时错误-SIGABRT

时间:2017-06-10 12:39:50

标签: c runtime-error

#toggle the string 

#include <stdio.h>
int main()
{
   char S[100],ch;
   int i=0;
   gets(S);
   while((S[i]!='\0')&&(i<100))
   {
       ch=S[i];
       if((ch>='A')&&(ch<='Z'))
           S[i]+=32;
       else if((ch>='a')&&(ch<='z'))
           S[i]-=32;
       i++;
   }
   printf("%s\n",S);
   return 0;
}

请让我知道代码有什么问题(代码是将字符串I.e.大写切换为小写,反之亦然。我收到SIGABRT运行时错误...

1 个答案:

答案 0 :(得分:0)

以下提议的代码:

  1. 干净地编译
  2. 记录每个头文件包含的原因
  3. 即使在非ASCII字符集(如EBCDIC)
  4. 上也能正常工作
  5. 消除不需要的变量
  6. 使用有效的函数调用:fgets()从stdin
  7. 读取
  8. 退出此程序,输入: Ctrl + c 或(取决于操作系统) Ctrl + d 控制 + ž
  9. 现在是代码:

    #include <stdio.h>  // fgets(), printf()
    #include <ctype.h>  // toupper(), tolower(), isupper(), islower()
    
    int main( void )
    {
       char S[100];
    
       //gets(S);
       if( fgets( S, sizeof( S ), stdin ) )
       {
           for( size_t i=0; S[i]; i++ )
           {
               if( isupper( S[i]) )
                   S[i] = (char)tolower( S[i] );
    
               else if( islower( S[i] ) )
                   S[i] = (char)toupper( S[i] );
           }
    
           printf("%s\n",S);
       }
    
       return 0;
    } // end function: main