我试图将用户输入字符串解析为数组。 Example: user inputs "hello to you" array[0]="hello" array[1]="to" array[2]="you'
在我提示用户输入一些单词后,程序似乎无限循环。我也尝试过使用矢量,所以它可能是我在另一个领域的逻辑。谈到C语言,我非常生疏,所以请原谅我的无知。任何帮助将不胜感激!
#include <iostream>
#include <string>
#include <sstream>
using namespace std;
struct FATNode;
struct FileNode;
class FileList;
class FAT
{
FATNode* head;
};
class FileList
{
FileNode* head;
//methods
public:
int createfile()
{
string word[2];
cout << "Please input file name, followed by file size: ";
int i = 0;
for (string input; cin >> input; i++)
word[i] = input;
for(i=0; i<2; i++)
cout << word[i] << ' ';
return 0;
}
};
struct FileNode
{
string filename;
int filesize;
FAT t1;
FileNode* next;
};
struct FATNode
{
int sectornumber;
FATNode* next;
};
main()
{
FileList myFileSystem;
char start;
int cmd;
bool cont = true;
while(cont == true)
{
cout << "Initializing disk.\n" << "To access menu, type 'Y'. To exit, type 'N': ";
cin >> start;
if(start == 'y' || start == 'Y')
{
cout << "What command would you like to execute on the disk?" << endl;
cout << "1. Format disk\n2. Create file\n3. Delete file\n";
cout << "4. List\n5. Read file\n6. Overwrite file\n7. Append to file\n8. Disk status\nSelection: ";
cin >> cmd;
switch(cmd)
{
case 1 :
break;
case 2 :
myFileSystem.createfile();
break;
default :
cout << "Invalid command" << endl;
}
}
else if(start == 'n' || start == 'N')
{
cont = false;
}
else
{
cout << "Invalid input." << endl;
}
}
}
答案 0 :(得分:2)
您的循环条件为cin >> input
。该表达式返回cin
,可以隐式转换为布尔值(http://en.cppreference.com/w/cpp/io/basic_ios/operator_bool)。但是,cin
只会变为false
,如果出现错误或者您已到达文件末尾(EOF
)。您可以按Ctrl + D发出EOF
信号。
另请注意,您使用的是固定大小的数组来存储从用户处获得的信息。这很糟糕,因为如果用户输入超过2个单词,则数组word
将溢出。这是未定义的行为。
如果您只想要一个文件名,后跟文件大小,为什么不使用:
std::string filename;
std::size_t filesize;
std::cin >> filename >> filesize;