同様のエラーを処理するスレッドをいくつか見てきましたが、遭遇した(「私はそれらを理解するにはグリーンすぎる」というコード)。タイプ "char *"の値を使用して "char"タイプのエンティティを初期化することはできません
#include <iostream>
#include <array>
#include <sstream>
using namespace std;
struct StudentRecord
{
char name[20];
int id;
float gpa;
};
int main()
{
cout << "Enter your name:" << endl;
char nameInput[20];
cin >> nameInput;
cout << "Enter your student ID:" << endl;
int idInput;
cin >> idInput;
cout << "Enter your GPA:" << endl;
float gpaInput;
cin >> gpaInput;
StudentRecord TESCStudent =
{ { nameInput }, idInput, gpaInput }; // TROUBLE STARTS HERE
cout << "Name: " << TESCStudent.name << "\nID: " << TESCStudent.id << "\nGPA: "
<< TESCStudent.gpa << endl;
}
StudentRecord TESCStudent = {...}初期化は、次のエラーを与える: エラーC2440: '初期化する':タイプの値: '文字' のIntelliSenseに 'CHAR [20]' から変換することはできませんが"char *"を使って "char"型のエンティティを初期化することはできません
文字列は多くの問題を解決すると思いますが、このプロジェクトでは20文字の配列として名前を取得するように求めました。
これは私の初めての構造体を使用しているので、意味がない恐ろしいことをしているかもしれません。
StudentRecord TESCStudent =
{ { *nameInput }, idInput, gpaInput };
修正問題:
あなたのコードが入力を20文字に制限する方法は100%明確ではありません。あなたはそれについて詳述できますか?また、私はアレイを使用することを余儀なくされましたが、私はあなたがアレイに直接読み込む方法に興味があります、私は将来それを試みます! –
@KeeperofSecrets 'setw'は、次の読み取りの最大サイズを設定します(文字配列の場合はnull終了を含む)。 –
Cool。これは素晴らしいソリューションであり、私が使用したforループよりもはるかに洗練されてエレガントです。 –