c - 为什么我会得到这些看似随机的输出?
问题描述
我陷入了一个 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;
}
我得到的输出。
名称文件是这个。
年龄档案是这个。
解决方案
这是因为您假设文本文件中每个姓名和年龄的结尾都是换行符“\n”。假设您在 Windows 机器中创建了文本文件,则行尾是\r\n
,即 - 回车符后跟换行符。使用 Hex Editor Neo,您的文件内容如下所示。
注意行尾 - '0x0d' 是回车 '\r' 而 '0x0a' 是换行符 '\n'。修改您的程序以考虑到这一点。
在此处阅读有关行尾的更多信息:https ://blog.codinghorror.com/the-great-newline-schism/
推荐阅读
- php - 正则表达式:通过捕获但排除来查找数字
- python - 词干:在 Python 中使用正则表达式模块删除/更改 URL
- php - Aloglia PHP Laravel Scout:如何在单个 API 调用中搜索多个索引?
- sql - SQL Server:获取给定月份的行序号
- sql-server - Analysis Services 多维数据集名称
- jquery - 选择正确的itemID jquery
- google-contacts-api - Google 联系人 API 返回 Invalid XML Document 错误
- android - 在人像模式下录制视频时出现方向问题android grafika
- authentication - asp.net core cookie 身份验证滑动过期不起作用
- objective-c - 从 Objective C 到 Swift 的代码转换