View Full Version : [C++]Problema lettura
Ho il seguente file:
GeforceFx5200
250
400
128
128
Da qui cerco di ricavare le info cosi:
#include <cstdio>
#include <cstdlib>
#include <string>
using namespace std;
struct Info
{
char * nm;
int gpu_c;
int mem_c;
int bus_c;
int mem_t;
};
int main(int argc, char * argv[])
{
Info sk_video;
memset(&sk_video, 0, sizeof(Info));
FILE * f = fopen("fx5200.txt", "r");
fread(&sk_video, sizeof(Info), 1, f);
// fscanf(f, "%s %d %d %d %d", &sk_video);
char sc;
printf
(
"Model Name => %s, \n \
Gpu Clock => %i \n \
Memory Clock => %i \n \
Bus type => %i \n \
Memory Installed => %i \n",
&sk_video.nm,
&sk_video.gpu_c,
&sk_video.mem_c,
&sk_video.bus_c,
&sk_video.mem_t
);
scanf("%s", &sc);
fclose(f);
return 0;
}
Ma il risultato è questo..................why????
Tnk && HELP :dhò:
Perchè non hai allocato lo memoria per la stringa...
char *nm è un puntatore a char e non una stringa...
char nm[100] è una stringa...ma attento alla lettura dal file con fread...non funziona fread su una stringa...a meno che la stessa sia stata scritta precedentemente tramite fwrite... In pratica ci dovrebbero essere 100 caratteri sula prima riga ;)
#include <cstdio>
#include <cstdlib>
#include <string>
using namespace std;
struct Info
{
int gpu_c;
int mem_c;
int bus_c;
int mem_t;
char nm[50];
};
int main(int argc, char * argv[])
{
Info sk_video;
memset(&sk_video, 0, sizeof(Info));
FILE * f = fopen("fx5200.txt", "r");
// fread(&sk_video, sizeof(Info), 1, f);
fscanf
(f,
"%s\n %d\n %d\n %d\n %d",
&sk_video.nm,
&sk_video.gpu_c,
&sk_video.mem_c,
&sk_video.bus_c,
&sk_video.mem_t
);
char sc;
printf
(
"Model Name => %s, \n \
Gpu Clock => %d Mhz \n \
Memory Clock => %d Mhz \n \
Bus type => %d bit \n \
Memory Installed => %d Mb \n",
&sk_video.nm,
&sk_video.gpu_c,
&sk_video.mem_c,
&sk_video.bus_c,
&sk_video.mem_t
);
scanf("%s", &sc);
fclose(f);
return 0;
}
:muro:
fscanf
(f,
"%s\n %d\n %d\n %d\n %d",
sk_video.nm,
&sk_video.gpu_c,
&sk_video.mem_c,
&sk_video.bus_c,
&sk_video.mem_t
);
printf
(
"Model Name => %s, \n \
Gpu Clock => %d Mhz \n \
Memory Clock => %d Mhz \n \
Bus type => %d bit \n \
Memory Installed => %d Mb \n",
sk_video.nm,
sk_video.gpu_c,
sk_video.mem_c,
sk_video.bus_c,
sk_video.mem_t
);
risolto:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct _Info
{
char nm[50]; /* the board name */
int gpu_c; /* the GPU clock */
int mem_c; /* the me clock */
int bus_c; /* the bus */
int mem_t; /* the installed memory */
}Info;
int main(int argc, char * argv[])
{
char sk[50] ;
strcpy(sk, argv[1]);
/* puts("\t\tDB SKEDE VIDEO\n");
puts("Inserire il nome delle skeda cercata tutto attaccato e seguito da .txt");
scanf("%s", &sk); */
Info sk_video;
memset(&sk_video, 0, sizeof(Info));
FILE * f = fopen(sk, "r");
fscanf
(f,
"%s %d %d %d %d",
&sk_video.nm,
&sk_video.gpu_c,
&sk_video.mem_c,
&sk_video.bus_c,
&sk_video.mem_t
);
fclose(f);
printf
(
"Model Name => %s \n \
Gpu Clock => %d Mhz \n \
Memory Clock => %d Mhz \n \
Bus type => %d bit \n \
Memory Installed => %d Mb \n",
sk_video.nm,
sk_video.gpu_c,
sk_video.mem_c,
sk_video.bus_c,
sk_video.mem_t
);
char sc;
puts("Enter any key to exit\n");
scanf("%s", &sc);
return 0;
}
Ti avevo cambiato anche la printf, ma non l'avevo evidenziata...
&sk_video.nm non ci vuole la &...
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.