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

What is wrong with my code? I can't compile it

本文关键字:编译 代码 什么 问题 我的      更新时间:2023-10-16

因此,此程序的目标是显示用户键入的名称的首字母缩写。所以,如果我打詹姆斯伊萨克牛顿,它应该给我金。我尝试在终端中使用g++-Wall-o名称.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

由于您声明了:

   char name[100];

则CCD_ 1(如果i是有效索引)是CCD_。但" "不是一个字符文字,而是一个字符串;你应该给编码

   if (name[j]==' ')

顺便说一句,您应该阅读更多关于C++(及其std::string)的内容,并考虑声明

 std::string name;

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

据推测,编译器告诉了您出了什么问题,但您忘记提供这些信息。我的编译器说

‘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;相同,但(也许)更危险。然后考虑使用name[i]0而不是C样式的char数组;这样,如果输入超过100个字符,程序就不会爆炸。

除了编译器错误,您还犯了一个错误:-

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

第二个cin会覆盖您使用get输入的第一个值。