如何打印结构的字段

时间:2020-12-27 10:46:51

标签: c linked-list

我正在尝试用 C 打印结构体的字段,但遇到了麻烦。 我有两个问题。

首先,当我尝试打印名为“math”的课程的字段“courseName”时,我得到:“(null)math================= ========“

其次,当我尝试打印字段 courseNumber 时,它会打印 courseNumber 和 courseName。 有人可以告诉我我做错了什么吗?

struct Course {
    char courseNumber[6];
    char courseName[30];
    struct Course* next;
};

struct Course* updateCoursesList(char courseDetails[], struct Course* coursesList)
{
    struct Course* head = NULL;
    int i = 6, j = 0;
    if (coursesList == NULL) {
        coursesList = (struct Course*)malloc(sizeof(struct Course));
        if (coursesList == NULL)
            return NULL;
        head = coursesList;
        strncpy(coursesList->courseNumber, courseDetails, 5);
        coursesList->next = NULL;
        while (courseDetails[i] != '\n') {
            coursesList->courseName[j] = courseDetails[i];
            i++;
            j++;
        }
    }
    else {
        head = coursesList;
        if (strncmp(courseDetails, coursesList->courseNumber, 5) == 0) {
            while (courseDetails[i] != '\n') {
                coursesList->courseName[j] = courseDetails[i];
                i++;
                j++;
            }
            return head;
        }
        while (coursesList->next != NULL) {
            if (strncmp(courseDetails, coursesList->courseNumber, 5) == 0) {
                while (courseDetails[i] != '\n') {
                    coursesList->courseName[j] = courseDetails[i];
                    i++;
                    j++;
                }
                return head;
            }
            else
                coursesList = coursesList->next;
        }
        coursesList->next = (struct Course*)malloc(sizeof(struct Course));
        if (coursesList->next == NULL)
            return head;
        strncpy(coursesList->next->courseNumber, courseDetails, 5);
        coursesList->next->next = NULL;
        while (courseDetails[i] != '\n') {
            coursesList->next->courseName[j] = courseDetails[i];
            i++;
            j++;
        }
    }
    return head;
}

int main()
{
    struct Course* coursesList = NULL;
    char array[30] = "12345 math\n";
    coursesList = updateCoursesList(array, coursesList);
    printf("%s", coursesList->courseNumber);
    printf("%s", coursesList->courseName);
}

1 个答案:

答案 0 :(得分:0)

您实际上可以使用 strncpy 来复制您的 courseNumbercourseName,因为它们都是字符串。

strncpy 不会以 \0 终止符终止复制的字符串,因此我们在末尾添加了 \0

对于您的输入 char array[30] = "12345 math\n";,请执行以下操作。

strncpy(coursesList->courseNumber, courseDetails, 5);
coursesList->courseNumber[5] = '\0';
//since your courseName is also string, you need not do piece by piece copy
strncpy(coursesList->courseName, courseDetails+6, 5);
coursesList->courseName[5] = '\0';

您的 ifelse 部分都不需要以下代码

while (courseDetails[i] != '\n')
{
    coursesList->courseName[j] = courseDetails[i];
    i++;
    j++;
}

注意:但是这种读取输入的非常奇怪的方式,而是从 stdin 获取输入并使用它们,因为所有课程的长度可能不同。