从char数组打印出更多值,然后再打印它';我们该怎么办?
我目前正在开发一个程序,可以从文本文件中读取信息。文本文件包含一个歌曲列表,我已经创建了一个结构,它应该能够在我的程序中保存歌曲列表中的每首歌曲 我把程序分成了不同的文件,它们看起来像这样 main.c从char数组打印出更多值,然后再打印它';我们该怎么办?,c,function,pointers,struct,C,Function,Pointers,Struct,我目前正在开发一个程序,可以从文本文件中读取信息。文本文件包含一个歌曲列表,我已经创建了一个结构,它应该能够在我的程序中保存歌曲列表中的每首歌曲 我把程序分成了不同的文件,它们看起来像这样 main.c #include "FuncDek.h" #include <locale.h> #include <crtdbg.h> int main() { //For swedish and check memory leak _CrtSetDbgFlag(_CRTDBG_AL
#include "FuncDek.h"
#include <locale.h>
#include <crtdbg.h>
int main()
{
//For swedish and check memory leak
_CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF);
setlocale(LC_ALL, "swedish");
//Create with starting size of 5
Song *ptr = (Song *)malloc(sizeof(Song) * 4);
int menuChoice = 0;
int nrOfSongs = 0;
//Read from file
readFromFile(ptr, &nrOfSongs);
system("pause");
do
{
system("cls");
menuChoice = menu();
switch (menuChoice)
{
case 1:
addSong(ptr, &nrOfSongs);
break;
case 2:
showList(ptr, nrOfSongs);
break;
case 0:
break;
default:
printf("\nFelaktigt val, försök igen\n");
system("pause");
break;
}
} while (menuChoice != 0);
free(ptr);
system("pause");
return 0;
}
#包括“fundek.h”
#包括
#包括
int main()
{
//用于检查和检查内存泄漏
_CRTSETDBG标志(_CRTDBG_ALLOC_MEM_DF|u CRTDBG_LEAK_CHECK_DF);
setlocale(LC_ALL,“瑞典语”);
//创建的起始大小为5
Song*ptr=(Song*)malloc(sizeof(Song)*4);
int menuChoice=0;
int nrOfSongs=0;
//从文件中读取
readFromFile(ptr和nrOfSongs);
系统(“暂停”);
做
{
系统(“cls”);
menuChoice=菜单();
开关(menuChoice)
{
案例1:
addSong(ptr和nrOfSongs);
打破
案例2:
展示名单(ptr、nrOfSongs);
打破
案例0:
打破
违约:
printf(“\nFelaktigt val,försök igen\n”);
系统(“暂停”);
打破
}
}while(menuChoice!=0);
免费(ptr);
系统(“暂停”);
返回0;
}
FuncDek.h
#ifndef FUNCDEK
#define FUNCDEK
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct {
char title[25];
char artist[25];
char year[4];
} Song;
int menu();
void addSong(Song *ptr, int *nrOfSongs);
void showList(Song *ptr, int nrOfSongs);
void readFromFile(Song *ptr, int *nrOfSongs);
#endif
#ifndef functdek
#定义FUNCDEK
#包括
#包括
#包括
类型定义结构{
字符标题[25];
炭艺术家[25];
焦年[4];
}歌曲;
int菜单();
void addSong(歌曲*ptr,int*nrOfSongs);
无效播放列表(歌曲*ptr,国际歌曲);
void readFromFile(歌曲*ptr,int*nrOfSongs);
#恩迪夫
最后是fundek.c
#include "FuncDek.h"
#pragma warning(disable: 4996)
//Print all from list
void showList(Song *ptr, int nrOfSongs)
{
system("cls");
printf("Låtlista\n");
printf("-------------------------------\n");
for (int i = 0; i < nrOfSongs; i++)
{
printf("Title: %s", ptr[i].title);
printf("Artist: %s", ptr[i].artist);
printf("År: %s \n\n", ptr[i].year);
}
system("pause");
}
//Read from file
void readFromFile(Song *ptr, int *nrOfSongs)
{
FILE *fileOpen;
fileOpen = fopen("song.txt", "r+");
if (fileOpen == NULL)
{
printf("Something went wrong. Could't open file\n");
}
char line[100];
int counter = 0;
int nrOfSongsInList = 0;
/*Read all information to line*/
while (fgets(line, sizeof(line), fileOpen) != NULL)
{
if (counter == 0)
{
nrOfSongsInList = line[0] - '0';
counter++;
}
else if (counter % 2 == 1 && counter == 1)
{
strcpy(ptr[*nrOfSongs].title, line);
counter++;
}
else if (counter % 2 == 0)
{
strcpy(ptr[*nrOfSongs].artist, line);
counter++;
}
else if (counter % 3 == 0)
{
strcpy(ptr[*nrOfSongs].year, line);
counter = 1;
*nrOfSongs += 1;
}
}
fclose(fileOpen);
}
#包括“fundek.h”
#杂注警告(禁用:4996)
//打印列表中的所有内容
无效播放列表(歌曲*ptr,国际歌曲)
{
系统(“cls”);
printf(“Låtlista\n”);
printf(“------------------------------------\n”);
对于(int i=0;i
我现在可以读取我的文本文件并将我的歌曲存储在我的stong结构中,我已经为它分配了内存。
我的问题发生在我尝试使用showList函数时。我可以打印出ptr[I]。艺术家和ptr[I]。标题正确,但出于某种原因,当我打印ptr[I]时。年份将显示年份+列表中下一首歌曲的标题
我的文本文件如下所示,每行都以“\n”结尾
四,
手鼓先生
鲍勃·迪伦
1965
爱的死铃声
瑞士肉包
1981
兴奋
洛伦
2012
现在爱我
约翰传奇
2016年
我不明白为什么打印出来的时间超过了一年。我注意到,如果我将结构中的year数组设置为与其他2个数组相同的大小,问题就会消失。但我想了解
当我在VS中调试时,它说它在arr年存储了正确的值。
有人知道我可能错过了什么吗?啊,谢谢,我根本没想过!