私は現在、競馬ゲームになるC言語のプログラムを作成しています。私が立ち往生している部分は、ファイルからランダムな名前を生成しています。私は馬のための構造とリンクされたリストを使用して10頭の馬を保管しています。名前はファイル "Names"にあります。私は、ファイル内のランダムな線を選び、それに行き、リンクされたリストの現在のノードに名前をコピーし、次の馬に移動したい。現在のところ、起動時に応答が停止し、-1073741819(0xC0000005)を返します。ファイルから構造体名にランダムな名前を割り当てます。
私はCとファイルのやりとりに慣れていません。
struct node{
int data;
float mult;
float payout;
int score;
struct node *next;
char name[20];//Where I'm trying to store the random name.
};
void rand_name(node* head, int i){
//A function to generate a random name from a list of 3162 names.
FILE* infile;
infile = fopen("Names","r");
if(infile == NULL){
printf("Error opening Names.txt");
exit(EXIT_FAILURE);
}
int cnt, j = rand() % 3162;//Pick a random line to copy.
char buff[100];
node *tmp = NULL;
tmp = malloc(sizeof(node));
tmp = head;
for(cnt = 0; cnt < 1; cnt++){
tmp = tmp->next; //Get to the current node.
}
cnt = 0;
while(cnt < j){
//Copy each line until you get to the random line to copy.
fgets(buff, 100, infile);
j++;
}
strcpy(tmp->name, buff); //Store the last copied line into the node.
return;
}
'j ++;' - > 'cnt ++'、 'tmp = malloc(sizeof(node)); tmp = head; ':' tmp'は 'head'で上書きします。 – BLUEPIXY
ファイルに3162行があることをご存知ですか?どうしてわかるの?ファイルが編集された場合はどうなりますか?ファイル内にそれほど多くの行がない場合、コードは何をすべきですか? –
はおそらく 'j'をオーバーフローしてビジー状態になり、fgetsでファイルの最後を読み取ってしまうため、応答が停止します。 fgetsはNULLを返します... –