Я пытаюсь сделать объект с примитивной таблицей символов и STL.Char возвращает weird output C++
Я искал, как 30 вопросов, касающихся stackoverflow о том же предмете, но он не дал мне ответов (я думаю, что я не способен их читать).
Так оно работает нормально, когда я заполняю информацию, но после того, как я попытаюсь напечатать их на консоли, они дают странные символы: «╠; ╠; ╠; ²» Я не знаю, почему это не моя самая сильная область , Я попытался установить char в NULL.
Спасибо, и мне очень жаль этот глупый вопрос.
Мой Object.h файл:
#ifndef Object_H
#define Object_H
#include <fstream>
#include <string>
#include <iostream>
using namespace std;
class Object
{
private:
char Name[100];
char Title[50];
char Phonenumber[30];
char RoomNumber[15];
public:
//default
Object();
//overload
Object(char, char, char, char);
char getName() const;
char getTitle() const;
char getPhno() const;
char getRoomnro() const;
~Object();
#endif
Мои Object.cpp
#include "Object.h"
Object::Object(){
Name[100] = {0};
Title[50] = { 0 };
Phonenumber[30] = { 0 };
RoomNumber[15] = { 0 };
}
Object::Object(char name, char title, char phonenumber, char roomnumber){
Name[100] = name;
Title[50] = title;
Phonenumber[30] = phonenumber;
RoomNumber[15] = roomnumber;
}
Object::~Object(){
}
//getterit
char Object::getName() const {
return Name[100];
}
char Object::getTitle() const {
return Title[50];
}
char Object::getPhno() const {
return Phonenumber[30];
}
char Object::getRoomnro() const {
return RoomNumber[15];
}
Мой main.ccp
#include <string>
#include <vector>
#include <iostream>
#include <fstream>
#include <iomanip>
#include "Henkilo.h"
using namespace std;
void objectFiller(vector<Object>&);
void printObject(const vector<Object>&);
int main() {
vector<Object> ObjectList;
objectFiller(ObjectList);
printObject(ObjectList);
}
void objectFiller(vector<Object>& newObjectList){
char name[100];
char title[50];
char phonenumber[30];
char roomnumber[15];
int size;
cout << "How many people: "; cin >> size;
for (int i = 0; i < size; i++)
{
cout << "Name: ";
cin >> name;
cout << "Title: ";
cin >> title;
cout << "Phonenumber: ";
cin >> phonenumber;
cout << "Roomnumber: ";
cin >> roomnumber;
Object newObject(name[100], title[50], phonenumber[30], roomnumber[15]);
newObjectList.push_back(newObject);
cout << endl;
};
}
cout << endl;
}
void printObject(const vector<Object>& newObjectList)
{
unsigned int size = newObjectList.size();
for (unsigned int i = 0; i < size; i++){
cout << newObjectList[i].getName() << " ; " << newObjectList[i].getTitle() << " ; " << newObjectList[i].getPhno() << " ; " << newObjectList[i].getRoomnro() << endl;
cout << endl;
}
}
'Имя [100] = имя;' ... Это не может работать? Вам не разрешено использовать std :: string? – drescherjm
Не используйте фрагменты кода для не поддерживаемых языков, пожалуйста! –
'Объект newObject (имя [100], название [50], номер телефона [30], номер комнаты [15]);' Конечно, не делает так, как вы думаете. Это фактически передает 1 символ, который находится за концом каждого из ваших массивов символов, вызывающих неопределенное поведение. имя [100] - это один символ за концом массива имен. Вы передаете этот символ только не всему массиву. Его даже не разрешает доступ к имени [100]. Это неопределенное поведение. – drescherjm