Ein*_*ols 1 c structure char data-structures
我有一些问题.我创建了文本文件studenti.txt,内容如下:
我想读取此文件并在c程序中打印文件的内容.我的代码是这样的:
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <windows.h>
#define N 16
int main()
{
FILE *fails_st;
struct date
{ int da_year;
int da_month;
int da_day;
};
struct studenti
{
int Nr;
char name[25];
char surname[25];
struct date dzd;
char dzimums[10];
} students[N];
int i, j;
system("cls");
fails_st = fopen("studenti.txt", "r");
for(i=0; i<N; i++)
{
fscanf(fails_st, "%d", students[i].Nr);
fgets(students[i].name, strlen(students[i].name)+1, fails_st);
fgets(students[i].surname, strlen(students[i].surname)+1, fails_st);
fscanf(fails_st, "%d", students[i].dzd.da_day);
fscanf(fails_st, "%d", students[i].dzd.da_month);
fscanf(fails_st, "%d", students[i].dzd.da_year);
fgets(students[i].dzimums, strlen(students[i].dzimums)+1, fails_st);
}
fclose(fails_st);
system("cls");
printf("Student list\n");
for(i=0; i<N; i++)
printf("%4d%15s%15s%d%d%d%%4s\n", students[i].Nr,
students[i].name, students[i].surname,
students[i].dzd.da_day,students[i].dzd.da_month,students[i].dzd.da_year,students[i].dzimums);
getch();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
但是当我运行程序时,只需停止"myfilename.exe已停止工作..........."我想知道我的代码中的错误在哪里.
请阅读文档fscanf(),您使用错了.您必须传递您希望存储其转换数据的地址fscanf():您希望它如何能够在您的变量中写入?
换句话说,这个:
fscanf(fails_st, "%d", students[i].Nr);
Run Code Online (Sandbox Code Playgroud)
应该:
fscanf(fails_st, "%d", &students[i].Nr);
Run Code Online (Sandbox Code Playgroud)
其中&是C的"地址" - 操作符,它的计算结果是表达式的地址.
另一个问题是你使用strlen()未初始化的字符串,这是无效的.你的意思是:
fgets(students[i].name, sizeof students[i].name, fails_st);
Run Code Online (Sandbox Code Playgroud)
还记得I/O调用可能会失败,你真的应该检查返回值.
| 归档时间: |
|
| 查看次数: |
96 次 |
| 最近记录: |