if (fp != NULL) { // 如果文件存在则读取设备信息 while (fscanf(fp, "%s %s %s %s %d %s %f", devices[count].id, devices[count].name, devices[count].user, devices[count].department, &devices[count].quantity, devices[count].purchase_time, &devices[count].price) == 7) { count++; } fclose(fp); //关闭文件 }为什么%s的不要取地址符而%d和%f要用
时间: 2024-02-14 08:35:27 浏览: 85
在C语言中,读取字符串需要使用%s格式控制符,它会将字符串读入到一个字符数组中。由于字符数组本身就是一个地址,所以在使用%s格式控制符时,不需要取地址符。而对于%d和%f这两种格式控制符,它们分别用于读取整数和浮点数,需要将读入的值存储到变量中,因此需要使用取地址符&来获取变量的地址,以便将读入的值存储到变量中。
相关问题
int main() { // 从文件中读取学生信息 FILE *fp = fopen("students.txt", "r"); if (fp != NULL) { while (!feof(fp)) { fscanf(fp, "%s %s %s %s %s %s %d", students[stu_num].id, students[stu_num].name, students[stu_num].pwd, students[stu_num].id_card, students[stu_num].dorm, students[stu_num].cls, &students[stu_num].status); stu_num++; } fclose(fp); }代码注释
这段代码是一个读取文件的程序,主要功能是读取名为 "students.txt" 的文件中的学生信息,然后将这些信息存储在一个数组中。程序首先打开文件,然后使用一个循环来读取文件中的每一行数据,直到文件末尾。在循环中,使用 fscanf 函数从文件中读取每个学生的 id、name、pwd、id_card、dorm、cls 和 status 等信息,然后将这些信息存储到一个结构体数组中。最后,程序关闭文件并退出。需要注意的是,程序没有对文件读取过程中可能出现的错误进行处理。
struct chexinxi *duqu() { struct chexinxi *head2= NULL; struct chexinxi *temp = NULL; char chexinghao[20], chepaihao[20]; FILE *fp = fopen("车辆信息.txt", "r"); if (fp == NULL) { printf("\t\t\t\t打开文件失败!文件名: 车辆信息.txt\n"); return NULL; } else { while (fscanf(fp, "%s %s", chexinghao, chepaihao) != EOF) { struct chexinxi *p = (struct chexinxi *)malloc(sizeof(struct chexinxi)); if (p == NULL) { printf("分配内存失败!\n"); } strcpy(p->chexinghao, chexinghao); strcpy(p->chepaihao, chepaihao); if (head2 == NULL) { head2 = temp = p; } else { temp->next = p; temp = p; } } fclose(fp); if (temp != NULL) { temp->next = NULL; } return head2; } }为什么错了
我看不出这段代码有什么明显的错误。但是,如果你遇到了问题,可能是由于以下几个原因:
1. 文件名或路径不正确:请确保文件名和路径与实际情况相符。
2. 内存分配失败:如果内存分配失败,则可能是由于没有足够的可用内存。请确保你的系统中有足够的可用内存,并尝试使用内存分配失败时返回的错误代码来找出问题所在。
3. 文件格式不正确:如果文件中的数据格式不正确,则可能会导致读取错误。请确保文件中的数据格式与代码中使用的格式相同。
如果你能提供更多详细的信息,我可能会更好地帮助你解决问题。
阅读全文