如何解决为什么我会得到这些看似随机的输出?
我遇到了一个 C 语言问题,我应该从他们各自的文件中输入玩家的姓名和年龄,并为特定数量的玩家输出相同的内容,这些玩家将被输入(或 -1 退出)。这个问题必须使用结构来解决。我附上了我正在处理的输出以及年龄和姓名文件包含的数据。
有人可以向我解释我哪里做错了吗?
任何优化方面的帮助也将非常有帮助。谢谢!
以下是代码
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct Cricket_Player_DataBase
{
char name[30];
int score;
char role[11];
int age;
int wickets;
};
int main()
{
FILE *nf_ptr,*af_ptr; //nf_ptr is pointing to name.txt file | af_ptr is pointing to age.txt file
nf_ptr = fopen("name.txt","r");
af_ptr = fopen("age.txt","r");
int number_of_players = 0; //will be used to fix the size of array of structures
// following code is used just to count number of players,upto the point where 'HERE' is written
int temp,border_check = 0;
while((temp = fgetc(af_ptr)) != EOF)
{
if(temp == '\n')
{
++number_of_players;
border_check = 0;
}
else border_check++;
}
if(border_check > 0) ++number_of_players;
af_ptr = fopen("age.txt","r");
// HERE
struct Cricket_Player_DataBase players[number_of_players];
int temp_age,zero = 0 ;
char temp_char[30],ch ;
for(int i=0; i < number_of_players; ++i)
{
temp_age = fgetc(af_ptr);
players[i].age = temp_age;
while((ch = fgetc(nf_ptr)) != EOF)
{
if(ch == '\n')
{
strncpy(players[i].name,temp_char,zero+1);
zero = 0;
break;
}
else
{
temp_char[zero] = ch;
zero++;
}
}
}
int input;
printf("Enter number of players you want to see the data of OR type -1 to exit : ");
scanf("%d",&input);
if(input > 0)
{
for(int i = 0; i < input; ++i)
{
printf("Data of player #%d is \nName : %s\nAge : %d\n",i+1,players[i].name,players[i].age);
}
}
fclose(nf_ptr);
fclose(af_ptr);
return 0;
}
Output 我明白了。
解决方法
您打开了 af_ptr 而没有关闭它。它可能会导致问题。如果您想再次打开同一个文件,请使用函数 rewind(file) 或 fclose 并再次打开它。
,这是因为您假设文本文件中每个姓名和年龄的结尾都是换行符“\n”。假设您在 Windows 机器上创建了文本文件,行结尾是 \r\n
,即 - 回车符后跟换行符。使用 Hex Editor Neo,您的文件内容如下所示。
Your name.txt file Your age.txt file
注意行尾 - '0x0d' 是回车符 '\r','0x0a' 是换行符 '\n'。修改您的程序以将其考虑在内。
在此处阅读有关行尾的更多信息:https://blog.codinghorror.com/the-great-newline-schism/
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。