C ++用户输入字符串数组无限循环

时间:2016-04-07 04:52:51

标签: c++ arrays input

我试图将用户输入字符串解析为数组。 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;
        }
    }
}

1 个答案:

答案 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;