Strcmp 用户输入和文件输入不匹配

Strcmp user input and file input not matching

本文关键字:输入 不匹配 文件 Strcmp 用户      更新时间:2023-10-16

对于作业,我必须从包含目录列表的文本文件中删除一行。用户输入文件名,必须删除包含文件名的目录。对于作业,我必须使用 char 数组。我遇到了一个问题,strcmp 在应该返回 0 时返回 -13,但这只发生在应该删除的行之后有另一行时。这里有问题的代码:

void deleteSong()
{
    char userSongName[ENTRY_SZ], objectSongName[ENTRY_SZ];
    cout << "Enter the name of a song you want to delete.n";
    cin.getline(userSongName, ENTRY_SZ);
    Node* tempNode = musicList.GetFirstNode();
    for (int n = 0; n < musicList.GetListLength(); n++)
    {
        strncpy(objectSongName, static_cast<Song*>(tempNode->data_)->GetSongName(), ENTRY_SZ);
        cout << strcmp(userSongName, objectSongName) << endl;
        if (!strcmp(userSongName, objectSongName))
        {
            ifstream songFileDir;
            ofstream tempFileDir;
            songFileDir.open(Song::songListFile_);
            tempFileDir.open("temp.txt");
            while (songFileDir.getline(userSongName, ENTRY_SZ))
            {
                if (!userSongName[0] == '')
                {
                    if (strcmp(strrchr(userSongName, '') + 1, objectSongName))
                    {
                        tempFileDir << userSongName << endl;
                    }
                }
            }
            songFileDir.close();
            songFileDir.clear(ios_base::goodbit);
            tempFileDir.close();
            tempFileDir.clear(ios_base::goodbit);
            remove(Song::songListFile_);
            rename("temp.txt", Song::songListFile_);
            musicList.RemoveThisLink(tempNode); //This calls a function that removes the node from the linked list.
            delete tempNode;
            return;
        }
        tempNode = tempNode->next_;
    }
    cout << "Song was not found.n";
    return;
}

它返回 -13

13 是回车的 ASCII。第二个参数似乎在末尾包含一个额外的 CR。

解决方案
通过删除(或用 '' 替换字符)参数字符串的所有尾随空格("ctype.h",isspace)字符来修剪字符串。