基于sizeof c ++的条件语句的问题

时间:2016-03-13 21:57:57

标签: c++

我是c ++的新手,我正在开发一个简单的DVD租赁程序。我遇到了案例3和案件的问题。 4具体而言。也许我误解了sizeof背后的目的。我想要做的是判断char数组是否为空,如果允许用户通过将其名称放入其中来检查它,如果它不可用则给它们一个回复说它不可用。案例4应该做相反的事情并允许他们检查。任何建议将不胜感激。

#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <string>
#include <limits>


using namespace std;


const int arrSize = 5;
struct dvdStruct //distance struct
{
int id;
char title[51] = { 0 };
char rating[5] = { 0 };
double price;
char borrower[51] = { 0 };

} dvd;

dvdStruct dvds[arrSize] = {};
int userSelection; //intput variable for main menu selection
int borrowId (0);
int borrowIdReturn(0);
//void initalize();


int main() {
int size(0);
dvds[0].id = 1;
dvds[1].id = 2;
dvds[2].id = 3;
dvds[3].id = 4;
dvds[4].id = 5;

strcpy(dvds[0].title, "Fast 1");
strcpy(dvds[1].title, "Fast 2");
strcpy(dvds[2].title, "Fast 3");
strcpy(dvds[3].title, "Fast 4");
strcpy(dvds[4].title, "Fast 5");

strcpy(dvds[0].rating, "PG - 13");
strcpy(dvds[1].rating, "PG - 13");
strcpy(dvds[2].rating, "PG - 13");
strcpy(dvds[3].rating, "PG - 13");
strcpy(dvds[4].rating, "PG - 13");

dvds[0].price = '19.1';
dvds[1].price = '19.2';
dvds[2].price = '19.3';
dvds[3].price = '19.4';
dvds[4].price = '19.5';

strcpy(dvds[0].borrower, "");
cout << strlen(dvds[0].borrower) << endl;
strcpy(dvds[1].borrower, "\0");
strcpy(dvds[2].borrower, "\0");
strcpy(dvds[3].borrower, "\0");
strcpy(dvds[4].borrower, "\0");

do {
    cout << "1.Display All DVD’s" << endl << "2.Display DVD Detail" << endl << "3.Check Out a DVD" << endl << "4.Check In a DVD" << endl << "5.Exit" << endl;
    cin >> userSelection; //Input from the user.

    switch (userSelection)
    {
    case 1:

        for (int i = 0; i < arrSize; i++)
        {
            std::cout << dvds[i].title << "' " << dvds[i].rating << " " << dvds[i].borrower << endl;
        }
        system("pause");
        system("CLS");
        break;
    case 2:
        int dvdNum;
        cout << "Enter a DVD number:";
        cin >> dvdNum;
        std::cout << dvds[dvdNum - 1].title << "' " << dvds[dvdNum - 1].rating << endl;
        system("pause");
        system("CLS");
        break;
    case 3:
        cout << "Enter and id:";
        cin >> borrowId;


            if (strlen(dvds[borrowId-1].borrower) == 0)
            {
                cout << "Enter your name: ";
                cin >> dvds[borrowId-1].borrower;
            }

            else
            {
                cout << "This dvd is not available" << endl;
            }
            system("pause");
            system("CLS");
            break;

    case 4:
        cout << "Enter and id:";
        cin >> borrowIdReturn;


            if (strlen(dvds[borrowIdReturn - 1].borrower) == 0)
            {
                cout << "This dvd is available" << endl;

            }

            else
            {
                cout << "Your DVD has been returned " << endl;
                strcpy(dvds[borrowIdReturn - 1].borrower, "\0");
            }
            system("pause");
            system("CLS");
        break;
    case 5:
        return 0;
        break;


    }
} while (userSelection == 1 || userSelection == 2 || userSelection == 3 || userSelection == 4);


}

1 个答案:

答案 0 :(得分:2)

sizeof()为您提供对象的大小。无论对象中的内容是什么,对象的大小始终都是相同的。实际上,sizeof()是在编译时计算的,它的值不会受到运行时发生的任何事情的影响。

在大多数情况下,

C ++代码应该使用std::string而不是char数组。 std::string的{​​{1}}方法指示字符串是否为空。

如果仍然坚持使用C风格的empty()数组和C风格的char终止字符串,请使用C '\0'函数检查字符数组是否只包含前导strlen(),表示空字符串。