I'm relatively new to the programming area and I'm doing a program where I need to read a file with 10 records with 4 fields (records of fixed size 60 and size of each variable field). However, I am having difficulties because I did all the logic of the program and it seems correct but when I run I encounter an error in a print ([Error] subscripted value is neither array nor pointer nor vector). However, even when I comment on this print to see if the rest of the program works, when I run it it gives error and closes. Here is the program:
#include <stdio.h>
#include <conio.h>
#include <math.h>
#include <stdlib.h>
#include <string.h>
int main (){
struct fixo{
char nome[15];
char sobrenome[15];
char rua [26];
int num;
};
struct fixo myreg[50];
char ch; //alocar caracteres do registro
char vet[15]; //vetor temporario
FILE *arq; //arquivo
int i;
int contTemporario=0; //contador de pipelines
int var; //contador do tamanho do registro
int nu; //numero que o usuario vai entrar
int n; //contador de caracteres do while
int k=0; //contador do vetor temporario
//int contTemp2=1; //contador para printar
int temp; //inteiro temporario
if ((arq=fopen("campo_var_reg_fixo.dad", "rb"))==NULL){
printf ("Erro ao abrir o arquivo!\n");
getch();
return (0);
}
while (fread(&ch,sizeof(char),1,arq)){ //ler char por char
if (ch == '|'){ //se achar um pipeline, quer dizer que eh um campo do registro
contTemporario++; //contador de pipelines aumenta
if (contTemporario == 4){ //primeiro testando a condição caso for 4 pipelines, ou seja, o fim de um registro
vet[k] = '#include <stdio.h>
#include <conio.h>
#include <math.h>
#include <stdlib.h>
#include <string.h>
int main (){
struct fixo{
char nome[15];
char sobrenome[15];
char rua [26];
int num;
};
struct fixo myreg[50];
char ch; //alocar caracteres do registro
char vet[15]; //vetor temporario
FILE *arq; //arquivo
int i;
int contTemporario=0; //contador de pipelines
int var; //contador do tamanho do registro
int nu; //numero que o usuario vai entrar
int n; //contador de caracteres do while
int k=0; //contador do vetor temporario
//int contTemp2=1; //contador para printar
int temp; //inteiro temporario
if ((arq=fopen("campo_var_reg_fixo.dad", "rb"))==NULL){
printf ("Erro ao abrir o arquivo!\n");
getch();
return (0);
}
while (fread(&ch,sizeof(char),1,arq)){ //ler char por char
if (ch == '|'){ //se achar um pipeline, quer dizer que eh um campo do registro
contTemporario++; //contador de pipelines aumenta
if (contTemporario == 4){ //primeiro testando a condição caso for 4 pipelines, ou seja, o fim de um registro
vet[k] = '%pre%'; //assimilar o espaço do pipeline do campo para o caracter nulo no vetor
(*myreg).num = atoi(vet); //o vetor será então o campo do registro
k=0; //zera contador do vetor
contTemporario = 0; //zera contador temporario de pipelines
var = abs(59-n); //guarda quantos caracteres faltam para acabar o registro atual
for (i=0; i<var; i++){
fread(&ch,sizeof(char),1,arq);
}
n = 0; //n eh o contador de caracteres de cada registro
printf ("\n");
continue; //pula para proxima iteração do while
}
if (contTemporario == 1){
vet[k] = '%pre%';
strcpy((*myreg).nome, vet);
k=0;
}
if (contTemporario == 2){
vet[k] = '%pre%';
strcpy((*myreg).sobrenome, vet);
k=0;
}
if (contTemporario == 3){
vet[k] = '%pre%';
strcpy((*myreg).rua, vet);
k=0;
}
}
else {
vet[k] = ch; //coloca o caracter que leu no vetor
k++;
}
printf ("%c", ch);
n++;
}
while ((nu>10)||(nu<1)){
printf ("\nDigite um numero entre 1 e 10: ");
scanf ("%d", &nu);
}
printf ("\nNome: ", (*myreg).rua[nu]);
printf ("\nSobrenome: %s", (*myreg).sobrenome[nu]);
printf ("\nNumero: %s", (*myreg).rua[nu]);
printf ("\nRua: %d", (*myreg).num[nu]); //esse é o print que da erro!
getch();
fclose(arq);
}
'; //assimilar o espaço do pipeline do campo para o caracter nulo no vetor
(*myreg).num = atoi(vet); //o vetor será então o campo do registro
k=0; //zera contador do vetor
contTemporario = 0; //zera contador temporario de pipelines
var = abs(59-n); //guarda quantos caracteres faltam para acabar o registro atual
for (i=0; i<var; i++){
fread(&ch,sizeof(char),1,arq);
}
n = 0; //n eh o contador de caracteres de cada registro
printf ("\n");
continue; //pula para proxima iteração do while
}
if (contTemporario == 1){
vet[k] = '%pre%';
strcpy((*myreg).nome, vet);
k=0;
}
if (contTemporario == 2){
vet[k] = '%pre%';
strcpy((*myreg).sobrenome, vet);
k=0;
}
if (contTemporario == 3){
vet[k] = '%pre%';
strcpy((*myreg).rua, vet);
k=0;
}
}
else {
vet[k] = ch; //coloca o caracter que leu no vetor
k++;
}
printf ("%c", ch);
n++;
}
while ((nu>10)||(nu<1)){
printf ("\nDigite um numero entre 1 e 10: ");
scanf ("%d", &nu);
}
printf ("\nNome: ", (*myreg).rua[nu]);
printf ("\nSobrenome: %s", (*myreg).sobrenome[nu]);
printf ("\nNumero: %s", (*myreg).rua[nu]);
printf ("\nRua: %d", (*myreg).num[nu]); //esse é o print que da erro!
getch();
fclose(arq);
}
Thank you in advance!