#c #pointers #struct
#c #указатели #структура
Вопрос:
Я пишу программу на C со структурами, указателями и т.д. Однако, когда я запускаю его, он выдает эту ошибку: «ошибка: ожидаемый ‘;’, ‘,’ или ‘)’ перед ‘.’ токеном»
в следующей строке
char *strcpy(char *account[i].nome, const char *nomi[p]);
По сути, что я хочу сделать, так это принять во внимание случайное имя, взятое из char nomi[p], где p — случайный индекс от 0 до 4.назовите переменную [i], где [i] определяется в цикле for.
Как вы можете видеть, я прокомментировал эту строку
//account[i].nome = nomi[p];
В противном случае это выдало бы мне эту ошибку -> ошибка: присвоение выражению с типом массива
Есть какие-нибудь подсказки?
#include <stdio.h>
#include <string.h>
#include <stdio.h>
#include <ctype.h> // includo la libreria per gestire le funzioni sui caratteri
#define MAX_ACCOUNT 5
#define MAX_NOME 20
#define MAX_COGNOME 20
#define MAX_EMAIL 40
typedef struct {
int giorno;
int mese;
int anno;
} data;
typedef struct {
char nome[MAX_NOME];
char cognome[MAX_COGNOME];
data datadinascita;
char email[MAX_EMAIL];
char password;
} acc;
int main(void) {
int seed = time(NULL); // Randomizzo
srand(seed); // time
unsigned i = 0;
unsigned p = 0;
unsigned q = 0;
unsigned r = 0;
char* nomi[4] = {"Gianmarco","Francesco","Michele","Marco","Roberto"};
char* cognomi[4] = {"Lorusso","Simone","Caggiano","Moramarco","Colonna"};
char* email[4] = {"rymmysice-2084@gmail.com","junetome-4060@hotmail.com","ikijaza-9272@live.it","hokalife-2155@libero.it","ottejotto-2395@gmail.com"};
acc account[MAX_ACCOUNT] = {0};
data datadinascita[MAX_ACCOUNT]; //variabile datadinascita
//Ciclo di lettura
for(i = 0; i < MAX_ACCOUNT; i ) {
p = rand() % (4-0 1) 0; //Max 4, Min 0
q = rand() % (4-0 1) 0; //Max 4, Min 0
r = rand() % (4-0 1) 0; //Max 4, Min 0
char *strcpy(char *account[i].nome, const char *nomi[p]);
//account[i].nome = nomi[p];
//account[i].cognome = *cognomi[q];
datadinascita[i].giorno = rand() % (31-1 1) 1; //Max 31, Min 1
datadinascita[i].mese = rand() % (12-1 1) 1; //Max 12, Min 1
datadinascita[i].anno = rand() % (2003-1960 1) 1960; //Max 2003, Min 1960
//account[i].email = *email[r];
printf("ACCOUNT #%d: ", i 1);
printf("Prova");
printf("ntNome: s", account[i].nome);
printf("ntCognome: s", account[i].cognome);
printf("ntData di nascita: %d-%d-%d", datadinascita[i].giorno, datadinascita[i].mese, datadinascita[i].anno);
printf("ntEmail: 9s", account[i].email);
printf("n");
}
return 0;
}
Комментарии:
1.
char *strcpy(char *account[i].nome, const char *nomi[p]);
это не вызов функции.2. Измените
char *strcpy(char *account[i].nome, const char *nomi[p]);
наstrcpy(account[i].nome, nomi[p]);
и добавьте#include <stdlib.h>
и#include <time.h>
. Вы также пытаетесь предоставить 5 инициализаторов для ваших массивов из 4 элементов.
Ответ №1:
Должно быть что-то вроде
strcpy(account[i].nome, nomi[p]);
Комментарии:
1. Это и ответ от @Weather Vane отлично сработали.
2. @SlimShadys Теперь главный вопрос к вам: вы понимаете, почему? И мне любопытно, откуда взялась предыдущая строка? Была ли это копипаста, которую вы неправильно изменили?