[英]C error: Expected expression
首先發布在這里。 因此,我正在構建一個程序,該程序在結構中保存有關學生的記錄。 我想使用一個具有六個元素的數組,然后將每個元素作為一個結構...。
typedef struct {
char* name;
char* surname;
char* UUN;
char* department;
char gender;
int age;
} student;
...
int main(void) {
int i;
student studentarr[5];
...因此,任務是定義前三個元素,並讓用戶輸入后三個元素。 我嘗試過定義
studentarr[0] = { "John", "Bishop", "s1234", "Inf", 'm', 18 };
studentarr[1] = { "Lady", "Cook", "s345", "Eng", 'f', 21 };
studentarr[2] = { "James", "Jackson", "s3456", "Eng", 'm', 17 };
但是編譯器給我錯誤
studentDB2.c:27:18: error: expected expression
studentarr[0] = { "John", "Bishop", "s1234", "Inf", 'm', 18 };
^
studentDB2.c:28:18: error: expected expression
studentarr[1] = { "Lady", "Cook", "s345", "Eng", 'f', 21 };
^
studentDB2.c:29:18: error: expected expression
studentarr[2] = { "James", "Jackson", "s3456", "Eng", 'm', 17 };
^
我該如何解決?
另一個問題是,聲明studentarrar [5]是否實際上創建了六個結構?
studentarr[0]
studentarr[1]
studentarr[2]
studentarr[3]
studentarr[4]
studentarr[5]
我很清楚這看起來多么基本,但是我必須參加這種風格的考試。 感謝所有幫助!
編輯:
所以我有一個功能
void printStudent(student s) {
printf("Name: %s %s\n", s.name, s.surname);
printf("UUN: %s\n", s.UUN);
printf("Department: %s\n", s.department);
printf("Gender: %c\n", s.gender);
printf("Age: %d\n", s.age);
}
編譯器要求用戶在學生結構中輸入信息(在帖子開頭),但是現在當函數printStudent運行時,它會像這樣顯示輸入的信息
Student 5
Name: Nina Storrie
UUN: S3736PSYf
Department: PSYf
Gender: f
Age: 19
為什么UUN和Department會這樣打印?
如果您想要一個數組來存儲6位學生的信息,則必須像這樣聲明它
student studentarr[6];
^^^
您可以在聲明它時對其進行初始化
student studentarr[6] =
{
{ "John", "Bishop", "s1234", "Inf", 'm', 18 },
{ "Lady", "Cook", "s345", "Eng", 'f', 21 },
{ "James", "Jackson", "s3456", "Eng", 'm', 17 }
};
在這種情況下,只有數組的三個元素被顯式初始化。 所有其他元素由零隱式初始化。
如果要為數組的元素分配值,則可以使用復合文字來實現。
例如
student studentarr[6];
studentarr[0] = ( student ) { "John", "Bishop", "s1234", "Inf", 'm', 18 };
否則,您必須分別分配數組元素的每個數據成員。
例如
studentarr[0].name = "John";
studentarr[0].surname = "Bishop";
等等
編輯:更新代碼后,此初始化數據成員部門聲明為
char department[3];
如果要存儲字符串,則字符串原義為“ Inf”的字符串無效。 字符串文字有4個字符,包括結尾的零。 因此,如果您希望該數據成員部門也包含此類字符串,則必須將其聲明為
char department[4];
^^
您不能使用這樣的語法來設置結構的值:
studentarr[0] = { "John", "Bishop", "s1234", "Inf", 'm', 18 };
此語法僅在定義變量時有效:
student studentarr[5] = {
{ "John", "Bishop", "s1234", "Inf", 'm', 18 },
{ "Lady", "Cook", "s345", "Eng", 'f', 21 },
{ "James", "Jackson", "s3456", "Eng", 'm', 17 },
...
};
另外,像studentarr[5]
這樣的定義studentarr[5]
創建一個包含五個索引為0到4的元素的數組。
您的結構的另一個問題。 因為您將要用作字符串的字段定義為char *
,所以在初始化時為它們提供的值是只讀的。 您應該將這些字段定義為字符數組。
例如:
typedef struct {
char name[50];
char surname[50];
char UUN[20];
char department[10];
char gender;
int age;
} student;
編輯:
AC字符串包含NUL終止符,因此請確保為該字符留出足夠的空間。 另外,在scanf
使用長度說明符,以確保用戶在該字段中輸入的字符不會太多。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.