مشكلتك هي أنك تحاول استخدام دالة gets
للحصول على مدخلات المستخدم وتخزينها في مصفوفة من نوع int
أو float
، وهذا لا يعمل. دالة gets
تستقبل مؤشرًا إلى مصفوفة من نوع char
، ولكنك تحاول تخزين المدخلات في مصفوفة من نوع int
و float
.
بدلاً من ذلك، يجب عليك استخدام cin
للحصول على مدخلات المستخدم ومن ثم استخدام atoi
و atof
لتحويل النصوص إلى أرقام صحيحة وأعداد عشرية على التوالي.
هناك طريقة أخرى لتحويل المدخلات مباشرة من نوع char
إلى int
و float
باستخدام الدوال stoi
و stof
في C++11 والأحدث. إليك كيف يمكنك تعديل الشيفرة الخاصة بك باستخدام cin
و stoi
و stof
:
cpp#include
#include
using namespace std;
int main()
{
struct Data
{
string name;
string Fname;
int idno;
float Gpa;
};
Data emp;
cout << "Enter name: ";
cin >> emp.name;
cout << "Enter father's name: ";
cin >> emp.Fname;
cout << "Enter Id number: ";
cin >> emp.idno;
cout << "Enter GPA: ";
cin >> emp.Gpa;
return 0;
}
هذا الكود يستخدم cin
للحصول على المدخلات من المستخدم ويستخدم stoi
و stof
لتحويل النصوص إلى أرقام صحيحة وأعداد عشرية.
المزيد من المعلومات
بالطبع! في الشيفرة التي كتبتها، تستخدم دوال atoi
و atof
لتحويل النصوص التي يقوم المستخدم بإدخالها إلى أرقام صحيحة وأعداد عشرية على التوالي. ومع ذلك، هناك بعض الأمور التي يجب أن تراعيها:
gets
تستخدم للحصول على سلسلة نصوص من المستخدم، ولكنها ليست آمنة للاستخدام لأنها لا تفحص الحدود، لذا يُفضل استخدامcin
أوfgets
في C++.- عند استخدام
gets
، يجب تحديد مصفوفة من نوعchar
، وليسint
أوfloat
. - في الكود الحالي، يُفترض أن تحدث أخطاء تشغيلية لأنك تحاول تخزين مدخلات المستخدم المكونة من أرقام في مصفوفة من نوع
int
وfloat
، وهذا لن ينجح.
لتحسين الكود، يُفضل استخدام cin
للحصول على مدخلات المستخدم واستخدام دوال stoi
و stof
لتحويل النصوص إلى أرقام صحيحة وأعداد عشرية، على التوالي.