私は現在、C ++の記憶をリフレッシュするために本を読んでいます。私が取り組んでいる章は、動的メモリ割り当てに関係しています。私は練習問題をやっていますが、プログラムの何が問題なのかを理解するのに苦労しています。質問は
「ユーザーがそれぞれの友達と最後に話した時間を追跡できるようにするプログラムを作成します。ユーザーは新しい友達を (好きなだけ) 追加し、それぞれの友達と最後に話した日数を保存できるようにする必要があります。フレンド. ユーザーがこの値を更新できるようにします (ただし、負の値などの偽の数字を入力させないでください). フレンドの名前でソートされたリストを表示できるようにします. "
今のところ、プログラムにユーザーの入力を正しく保存させようとしています。
5人の友達を入力するとクラッシュするので、配列に書き込んでいると推測していますが、Resize関数がそれを処理する必要があります。
彼は私のコードです
#include <iostream>
#include <cstdlib>
#include <string>
using namespace std;
struct Friend
{
string friends;
int days;
};
Friend Resize(Friend* p_array, int* size_of_array);
int main()
{
struct Friend f;
int quit = 1;
int array_size = 5;
int number_of_friends = 0;
Friend *p_array = new Friend [array_size];
while(quit != 0)
{
cout << "Enter a friends name.\n";
cin >> f.friends;
cout << "Enter the number of days sence you last saw them.\n";
cin >> f.days;
cout << "Enter '0' to quit the program.\n";
cin >> quit;
if(array_size == number_of_friends)
{
Resize(p_array, &array_size);
}
p_array[number_of_friends] = f;
number_of_friends++;
}
//print the array
cout << endl;
for(int i = 0; i < sizeof(p_array); i++)
{
cout << p_array[i].friends << " " << p_array[i].days << endl;
}
//delete the array
delete [] p_array;
return 0;
}
Friend Resize(Friend* p_array, int* size_of_array)
{
*size_of_array *= 2;
Friend *p_new_array = new Friend [*size_of_array];
for(int i = 0; i < *size_of_array; i++)
{
p_new_array[i] = p_array[i];
}
delete [] p_array;
p_array = p_new_array;
}