PDA

View Full Version : [C] newbie: prob. con Dev-C++


chinchillart
05-03-2007, 12:27
Sto scrivendo i primi programmi in C, per imparare.
Ora, nell'aplicare una tecnica di masking, ho scritto il primo programma in C, che però non acquisisce una semplice successione di 4 interi:

#include <stdlib.h>
#include <stdio.h>

int main( void )
{
unsigned int n1, n2, n3, n4;

printf("Introdurre i 4 interi ");
scanf("%d %d %d %d", &n1, &n2, &n3, &n4);
printf("%d %d %d %d\n", n1, n2, n3, n4);
system( "PAUSE" );
return 0;
}

Nonostante la mia incredulità, il programma non stampa i 4 interi introdotti, ma bensì stampa 0 0 0 e l'ultimo intero correttamente.
Notate che se metto le variabili come globali il tutto funziona.
Lo stesso programma compilato in Borland Turbo C++ 3.0 per DOS funziona.
Mi spiegate l'arcano?

Roberto

Claudio M
06-03-2007, 16:17
Io l'ho compilato in c++ (compilatore gcc 3.4.6) e funziona.
Penso che scanf in c (che non uso) sia diverso da scanf in c++ tutto qui.

guard queste differenze
c'è pure l'equivalente c++ di scanf

http://yenigul.net/tpop/handouts/CPP_to_C.htm

, e nota che non si chiama scanf, almeno penso, Ciao.

chinchillart
06-03-2007, 16:35
Io l'ho compilato in c++ (compilatore gcc 3.4.6) e funziona.
Penso che scanf in c (che non uso) sia diverso da scanf in c++ tutto qui.

guard queste differenze
c'è pure l'equivalente c++ di scanf

http://yenigul.net/tpop/handouts/CPP_to_C.htm

, e nota che non si chiama scanf, almeno penso, Ciao.

Dal documento che mi hai linkato:


Input

There is a standard input stream stdin which works like cin. Functions such as scanf automatically use stdin, so
cin >> i >> s; // C++

becomes
scanf("%d%s", &i, s); /* C */

or
fscanf(stdin, "%d%s", &i, s); /* C */

Note the need for pointers to int (but strings are already pointers to char).

Non mi è molto di aiuto. Io sto compilando con miniGW sotto windows con Dev-C++. Ma quando apro un progetto scelgo progetto "consolle" in linguaggio C. Quindi dovrebbe attenersi alle regole del C.

Di fatto la funzione scanf riporta anche il numero dei dati acquisiti, e nel mio caso riporta 4 per le 4 variabili. Tuttavia le prime tre, se stampate, hanno valore 0.

Un altro esempio:

int main(void)
{
unsigned short int num1, num2;
int check;

printf("Introdurre 2 numeri: ");
check = fscanf(stdin, "%d%d", &num1, &num2);
printf("%5d %5d\n", num1, num2);
printf("check = %d\n", check);
system("PAUSE");
return 0;
}

In questo caso, se introduco 10 11, printf mi stampa 0 11, ma check vale 2. Ed ho usato fscanf.
Ho cercato in rete ma usare scanf in C sembra la cosa più facile del mondo, anche se non è più considerata una funzione portabile rispetto allo standard GNU.
Non capisco questi risultati balordi...

Roberto

Torav
06-03-2007, 16:48
scusa per la domanda stupida, non è che hai reinstallato dev-cpp su una installazione più vecchia? io una volta l'ho fatto senza accorgermene e mi dava tutti errori del genere, oltre a casini col linker e altro ancora, c'ho messo parecchio a capire dove avevo sbagliato :p

chinchillart
06-03-2007, 17:45
scusa per la domanda stupida, non è che hai reinstallato dev-cpp su una installazione più vecchia? io una volta l'ho fatto senza accorgermene e mi dava tutti errori del genere, oltre a casini col linker e altro ancora, c'ho messo parecchio a capire dove avevo sbagliato :p

Guarda, è possibile una cosa del genere: ho installato anche Borland C++ Builder 6, e il debugger di Borland si era sostituito a quello di Dev-C++.
Oggi però ho disintallato entrambi e ho reinstallato solo Dev-C++. Cancellando a mano tutti i file restanti. Non credo che adesso sia quello il problema...
Cmq grazie del contributo. :)

Roberto