#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> typedef struct employee { char name[10]; char sex; int sal; }Employee; //第二题 int main() { //创建 Employee emp[5]; //赋值并写入文件 for (int i = 0; i < 5; i++) { printf("请输入员工信息\n"); printf("姓名:"); scanf("%s\n",emp[i].name); printf("性别:"); scanf("%c\n", emp[i].sex); printf("工资:"); scanf("%s\n", emp[i].sal); } FILE* p; if ((p = fopen("emp.dat", "wb")) == NULL){ printf("文件不存在或已损毁"); return 1; } fwrite(emp,sizeof(Employee),5,p); fclose(p); //读取 if ((p = fopen("emp.dat", "rb")) == NULL){ printf("文件不存在或已损毁"); return 1; } for (int x = 0; x < 5; x++) { fread(&emp,sizeof(Employee), 5, p); printf("姓名:%S性别:%c工资:%d\n",emp->name,emp->sex,emp->sal); } fclose(p); //暂停程序 system("pause"); }这段代码能够运行吗?
时间: 2024-03-03 22:52:36 浏览: 17
这段代码存在一些问题,不能够运行。
首先,在结构体中定义了一个名为 name 的字符数组,但在 scanf 中却加了一个换行符,导致输入的字符串会多一个换行符,需要将 scanf 中的换行符去掉。
其次,在 scanf 中输入字符类型时,需要使用取地址符 &,即应该使用 &emp[i].sex,而不是 emp[i].sex。
另外,在 scanf 中输入整型时,应该使用 %d,而不是 %s。
最后,在读取文件时,应该使用 &emp[x],而不是 &emp。
修改后的代码如下:
相关问题
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> #include <string.h> #define PHONE_SIZE 50 #define NAME_SIZE 20 typedef struct lxr { char phone[PHONE_SIZE]; char name[NAME_SIZE]; }lxr; int main() { lxr a[10]; a[0].phone = "liujunjie"; printf("%s", a[0].phone); return 0; }
这段代码存在一些问题。首先,您不能直接将字符串赋值给字符数组。其次,如果您想将字符串复制到字符数组中,您应该使用strcpy函数而不是直接赋值运算符。另外,还需要注意将字符串赋值给字符数组时,字符数组的大小应该足够大以容纳整个字符串。以下是修改后的代码:
```c
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define PHONE_SIZE 50
#define NAME_SIZE 20
typedef struct lxr {
char phone[PHONE_SIZE];
char name[NAME_SIZE];
} lxr;
int main()
{
lxr a[10];
strcpy(a[0].phone, "liujunjie"); // 使用strcpy函数将字符串复制给字符数组
printf("%s", a[0].phone);
return 0;
}
```
这样,代码就能正常运行并输出"liujunjie"。
请将LinkList &L改成LinkList *L而不出bug:#define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> #include<stdlib.h> typedef struct LNode { int data;//数据域 struct LNode *next;//指针域 }LNode,LinkList; bool InitList(LinkList &L)//初始化单链表 { L = (LNode)malloc(sizeof(LNode));//分配一个头节点 if (L == NULL) return false;//内存不足,分配失败 L->next = NULL;//头节点之后还没有节点 return true; }
将代码中的"LinkList &L"改为"LinkList *L"即可,修改后的代码如下:
```
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
typedef struct LNode {
int data;//数据域
struct LNode* next;//指针域
}LNode, * LinkList;
bool InitList(LinkList* L)//初始化单链表
{
*L = (LNode*)malloc(sizeof(LNode));//分配一个头节点
if (*L == NULL)
return false;//内存不足,分配失败
(*L)->next = NULL;//头节点之后还没有节点
return true;
}
```