问题描述
当我在 read 函数中输入 id 的值时,它读取正确的值,但是当我在显示函数中打印它时,它会在它之后添加一些垃圾......我尝试在字符串后添加 '\0' 没有变化! 请帮我解决这个问题。 这也只发生在 TURBO C++ 中,而我的代码在 DEV C++ 中完美运行,以及在 CMD 上与 MINGW 一起运行时。请解释在 turbo c++ 中如此荒谬的输出的原因。 这是我在 turbo c++ 中运行的 c++ 代码:
#include <iostream.h>
#include <string.h>
#include <stdio.h>
#include <conio.h>
//using namespace std;
class Student
{
private:
char name[50],course[10],id[10];
long int roll_no,year;
public:
void read()
{
//clrscr();
cout<<"ENTER NAME"<<endl;
gets(name);
cout<<"ENTER ID"<<endl;
cin>>id;
cout<<"ENTER ROLL NUMBER"<<endl;
cin>>roll_no;
cout<<"ENTER COURSE"<<endl;
cin.ignore();
gets(course);
cout<<"ENTER YEAR (in number)"<<endl;
cin>>year;
}
void display()
{
cout<<"NAME:"<<name<<endl;
cout<<"ID:"<<id<<" "<<endl;
cout<<"ROLL NO:"<<roll_no<<endl;
cout<<"COURSE AND YEAR:"<<course<<" "<<year<<"year"<<endl;
}
};
int main()
{
Student s;
s.read();
s.display();
return 0;
}
解决方法
当我们在大小为 'n' 的 turbo 中声明一个 char[] 并为其提供 n 个字符时,它没有空字符的空间,因为 turbo c++ 需要额外的空间来为 '\0' 而没有结尾的字符串有垃圾添加到它。因此,如果声明了 id[11] 或 >11,那么它将为 '\0' 留出空间,因此不会打印垃圾。