因此,该程序的目标是显示用户输入的名称的首字母。所以,如果我输入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
答案 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输入的第一个值。