[英]why I can't use “gets function” after using “cin function” in dev c++?
这是我的代码:
#include <iostream.h>
#include <conio.h>
#include <stdio.h>
#include <string.h>
main()
{
char a[120];
int b;
cout<<"age : ";
cin>>b;
cout<<"Name : ";
gets(a);
cout<<"Name : "<<a<<endl;
cout<<"age : "<<b;
cout<<endl;
system("pause");
return 0;
}
输出:age:20 //我输入20 Name:Name://不需要输入name。 年龄:20按任意键继续...
但是,如果我先使用gets(a),就可以了。
#include <iostream.h>
#include <conio.h>
#include <stdio.h>
#include <string.h>
main()
{
char a[120];
int b;
cout<<"Name : ";
gets(a);
cout<<"age : ";
cin>>b;
cout<<"Name : "<<a<<endl;
cout<<"age : "<<b;
cout<<endl;
system("pause");
return 0;
}
输出:名称:John //我键入John。 年龄:20 //我输入20。
姓名:约翰年龄:20按任意键继续...
他们怎么了...请帮助...
无论您现在正在学习什么书/互联网教程,都将其丢弃。 不,认真 该代码看起来就像是在1992年编写的。 这是Stack Overflow社区推荐的书籍清单。
另外,如果您的Dev-C ++版本是4.9.9.2,我强烈建议您进行更新-较新的IDE将提供更好的编辑器,更好的调试器和(非常重要的)更好的编译器。 更好的编译器将为您提供更好的错误消息,这在学习C ++时很重要(请相信我,我从经验中知道)。常见的替代方法是:Visual C ++,Code :: Blocks或如果您喜欢Dev-C ++,只需升级到Orwell Dev-C ++。
现在让我们前进到2013年。
警告事项
有几个笑话可以简化为“嗯,我听错误而不是警告”。 他们错了。 95%的警告表示该代码错误。 由于C ++是一种棘手的语言,因此每个人都应该在自己的IDE中启用警告(让我困惑为什么默认情况下未启用警告)。
标头
C ++命名空间的引入意味着不赞成使用旧的标头。 这意味着在编写新代码时不应使用它们。
标头名称的更改如下:
内置的C ++标头末尾没有“ .h”。 (“ iostream.h”->“ iostream”)
源自C的标头末尾没有“ .h”,也以“ c”开头(“ stdio.h”->“ cstdio”)
conio.h既不是内置的C头文件,也不是内置的C ++头文件,因此名称保持不变。
弦乐
C ++具有字符串类型。 std::string
。 它允许简单的字符串操作而不会麻烦。 只需#include <string>
即可使用。
string first_name = "John";
string surname = "Titor";
string full_name = first_name + " " + surname; //easy concatenation
//string a = "first" + " " + "name" //nasty surprise
string c = "first" + string(" ") + "name" //much better
//or using stringstream (#include <sstream>)
stringstream ss;
ss << "first" << " " << "name";
c = ss.str();
gets()
此功能无法安全使用-它不会限制用户输入,也不会扩展缓冲区。 在您的示例代码中,某人可能输入了120个以上的字符,并最终导致未定义的行为 。 该术语等同于数学的未定义行为-可能发生任何事情,包括1等于2。最近将gets()
函数从C语言中完全删除了。 C ++有一个安全的替代方法。
string s;
getline(cin, s);
正确声明main()
int main()
要么
int main(int argc, char* argv[])
避免同时使用iostream和stdio中的函数。
但是,您的问题是由另一个Enter
引起的。
输入年龄并按Enter键时, cin
仅包含数字。 Enter
传递给gets()
因此直接返回。
修复可能是
#include<iostream>
#include<stdio.h>
#include<string>
using namespace std;
main()
{
char a[120];
int b;
cout<<"age : ";
cin>>b;
cin.ignore(); //add this line to eat the enter
cout<<"Name : "<<flush;
gets(a);
cout<<"Name : "<<a<<endl;
cout<<"age : "<<b;
cout<<endl;
system("pause");
return 0;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.