我的代码出了什么问题?我无法编译它

时间:2014-11-07 16:50:48

标签: c++

因此,该程序的目标是显示用户输入的名称的首字母。所以,如果我输入James Issac Newton,它应该给我JIN。我尝试使用g ++ -Wall -o name name.cpp在终端中编译我的代码,但它不会编译。我究竟做错了什么?

#include<iostream>
#include<string>
#include<stdio.h>
using namespace std;
int main()
{
  char name[100];
   gets(name);
   char a,b,c;
   cin>>name;
   a=name[0];
   int x;
   for (int i=0;i<=strlen(name);i++)
       {
            if (name[i]==" ")
                  {
                     b=name[i+1];
                     x=i;
                     break;
                  }

       }
   for (int j=x;j<=strlen(name);j++)
         {
             if (name[j]==" ")
                   {
                c=name[j+1];
                   }
         }


        cout<<a<<b<<c;

        return 0;   


        }

编译器错误消息: 我的文件名是acro.cpp acro.cpp:

In function âint main()â:  
acro.cpp:8:2: warning: âchar* gets(char*)â is deprecated (declared at /usr/include/stdio.h:638) [-Wdeprecated-declarations]
acro.cpp:8:11: warning: âchar* gets(char*)â is deprecated (declared at /usr/include/stdio.h:638) [-Wdeprecated-declarations] acro.cpp:13:29: error: âstrlenâ was not declared in this scope

3 个答案:

答案 0 :(得分:3)

因为你宣布:

   char name[100];

然后name[i](如果i是有效索引)是char。但是" " 不是一个字符文字,而是一个字符串;你应该编码

   if (name[j]==' ')
顺便说一句,你应该阅读更多关于C ++(及其std::string)并考虑声明

 std::string name;

并调整程序的其余部分以使其工作。 BTW,汇编所有警告&amp;调试信息(g++ -Wall -Wextra -g)并学习如何使用调试器(gdb

答案 1 :(得分:2)

据推测,编译器告诉你错误,但是你忘了提供这些信息。我的编译器说

‘strlen’ was not declared in this scope

因为您忘记包含定义它的标题<cstring>

然后它说

ISO C++ forbids comparison between pointer and integer

解释起来有点棘手;它指的是这个

if (name[i]==" ")

您尝试将字符(转换为整数)与字符串(转换为指针)进行比较。相反,与另一个角色进行比较:

if (name[i]==' ')
             ^ ^

编译完成后,摆脱gets(name);。它与cin >> name;的作用相同,但(或许)更危险。然后考虑使用std::string而不是C风格的char数组;这样,如果您输入超过100个字符,您的程序就不会爆炸。

答案 2 :(得分:1)

除了编译器错误之外,你又犯了一个错误: -

   gets(name);
   char a,b,c;
   cin>>name;

第二个cin将覆盖您使用gets输入的第一个值。