微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

C++ 字符串被打印为十六进制,当这不是目的时

如何解决C++ 字符串被打印为十六进制,当这不是目的时

我正在为学校开展一个项目,我们应该在该项目中创建联系簿。 我偶然发现了一个问题,我的程序将字符串打印为十六进制符号,我以前从未遇到过这个问题,也不知道如何解决它。

字符串从数组中打印在终端上。

#include <iostream>
#include <string>
using namespace std;

const int unikapersoner = 75;
string I_namn[unikapersoner];
string T_Nummer[unikapersoner];

void addcontact() {
    char Fullname[50];
    char TelefonNummer[50];
    cin.ignore();
    cout << "Ange det fullständiga namnet du vill spara till kontaktboken.. "
         << endl;
    cin.getline(Fullname,50);
    cout << "Ange telefonnummeret till personen som du vill spara.. " << endl;
    cin.getline(TelefonNummer,50);

    for(int i = 0; i < unikapersoner; i++) {
        if(T_Nummer[i] == "\0") { // Letar efter tom index.
            I_namn[i] = Fullname;
            T_Nummer[i] = TelefonNummer;
            break;
        }
    }
}

void listALLcontacts() {
    cout << "/Kontakter/." << endl;
    cout << "=================================" << endl;
    int nr = 0;
    for(int i = 0; i < unikapersoner; i++) {
        if(T_Nummer[i] != "\0") {
            nr++;
            cout << "#" << nr << " " << I_namn << " " << T_Nummer << endl;
            cout << "- - - - - - - - -" << endl;
        }
    }
    cout << "=================================" << endl;
    if(nr == 0) {
        cout << "Du har inga kontakter i din telefonbok..";
    }
}
int main() {
    int terminalval;
    system("CLS");

    do {
        cout << "Din telefonbok!" << endl;
        cout << "1 : Ange ny Kontakt" << endl;
        cout << "2 : Se nuvarande Kontakter" << endl;
        cout << "3 : Uppdatera kontakt" << endl;
        cout << "4 : Radera kontakt" << endl;
        cout << "5 : Avsluta" << endl;
        cout << "Ange ditt val.." << endl;
        cin >> terminalval;

        switch(terminalval) {
        case 1:
            addcontact();

            break;
        case 2:
            listALLcontacts();
            break;
        case 3:
            updatecontacts();
            break;
        case 4:
            deletecontact();
            break;
        default:
            cout << "Är ett felaktigt kommando! " << endl;
        }
    } while(terminalval != 5);
}

例如,某些输出可以是 "#1 0x123123fb123 0x213g2134z13" 我会一如既往地感谢我能得到的所有帮助! 谢谢。

解决方法

您正在函数 I_namn 中打印数组 T_NummerlistALLcontacts 的地址:

cout << "#" << nr << " " << I_namn << " " << T_Nummer << endl;

您应该使用索引 i 来打印找到的条目:

cout << "#" << nr << " " << I_namn[i] << " " << T_Nummer[i] << endl;

与您提出的问题无关的注释:

你做一些这样的比较

if(T_Nummer[i] == "\0")

这是不需要的。 "\0" 实际上是 2 char s 长,由您放在那里的 \0 和终止的 \0 组成,所以就这样做

if(T_Nummer[i] == "")

甚至更好:

if(T_Nummer[i].empty())

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。