strcmp 用户输入和文件输入不匹配
Strcmp user input and file input not matching
对于作业,我必须从包含目录列表的文本文件中删除一行。用户输入文件名,必须删除包含文件名的目录。对于作业,我必须使用 char 数组。我在 strcmp returns -13 应该 return 0 时遇到问题,但这仅在应删除的行之后还有另一行时才会发生。这里有问题的代码:
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] == '[=10=]')
{
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;
}
It returns -13
13 是 Carriage return 的 ascii。
似乎第二个参数在末尾包含一个额外的 CR。
解决方法
Trim删除字符串(或用'[=10=]'
替换字符)所有尾随空格("ctype.h", isspace) 参数字符串的字符。
对于作业,我必须从包含目录列表的文本文件中删除一行。用户输入文件名,必须删除包含文件名的目录。对于作业,我必须使用 char 数组。我在 strcmp returns -13 应该 return 0 时遇到问题,但这仅在应删除的行之后还有另一行时才会发生。这里有问题的代码:
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] == '[=10=]')
{
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;
}
It returns -13
13 是 Carriage return 的 ascii。 似乎第二个参数在末尾包含一个额外的 CR。
解决方法
Trim删除字符串(或用'[=10=]'
替换字符)所有尾随空格("ctype.h", isspace) 参数字符串的字符。