Отображение значений мусора в структурах в c ++ - PullRequest
0 голосов
/ 05 октября 2019
#include<iostream>
using namespace std;
struct student
{
  char name [50];
  int roll;
  float marks;
}s = {"Karthik",1,95.3};
int main()
{
  struct student s;
  cout<<"\nDisplaying Information : "<<endl;
  cout<<"Name  : "<<s.name<<endl;
  cout<<"Roll  : "<<s.roll<<endl;
  cout<<"Marks : "<<s.marks<<endl;
   return 0;
} 

OutPut:

Displaying Information : 
Name  : 
Roll  : 21939
Marks : 2.39768e-36

Скомпилировано на Visual-Studio-Code (на Linux OS) что я должен сделать, чтобы получить правильный вывод.

Ответы [ 2 ]

1 голос
/ 05 октября 2019

Ваши два объявленных объекта типа student.

Первый объявлен в глобальном пространстве имен

struct student
{
  char name [50];
  int roll;
  float marks;
}s = {"Karthik",1,95.3};

и инициализирован, а второй - в области видимости блокафункция main

struct student s;

, кроме того, не инициализированная.

Объект, объявленный в области видимости блока, скрывает объект с тем же именем, объявленным в глобальном пространстве имен.

Удалите локальную декларацию или используйте полное имя, чтобы указать объект, объявленный в глобальном пространстве имен, например

  cout<<"\nDisplaying Information : "<<endl;
  cout<<"Name  : "<< ::s.name<<endl;
  cout<<"Roll  : "<< ::s.roll<<endl;
  cout<<"Marks : "<< ::s.marks<<endl;
1 голос
/ 05 октября 2019

Поскольку вы используете этот неинициализированный struct:

struct student s; 

, который скрывает глобальный s.

Вместо этого инициализируйте его в main:

student s = {"Karthik",1,95.3};
...