2011-09-30 10 views
9

In C, utilizzando scanf() con i parametri, scanf("%d %*d", &a, &b) agisce in modo diverso. Inserisce valore per una sola variabile non due!scanf() salta variabile

Si prega di spiegare questo!

scanf("%d %*d", &a, &b); 

risposta

15

Il * pratica significa la specificazione viene ignorato (numero intero viene letto, ma non assegnato).

Citazione dal man scanf:

*  Suppresses assignment. The conversion that follows occurs as 
      usual, but no pointer is used; the result of the conversion is 
      simply discarded. 
+0

Ma cosa è successo se ho scartato un intero che in realtà non esiste sul file, sembra che fscanf non abbia esito negativo. – Bionix1441

10

asterisco (*) indica che il valore per il formato verrà letto, ma non sarà scritto nella variabile. scanf non si aspetta puntatore variabile nella sua lista di parametri per questo valore. Dovresti scrivere:

scanf("%d %*d",&a); 
+0

C'è un modo per ignorare tutti i caratteri dopo quello che vogliamo leggere usando 'fscanf'? Ignoro tutto fino alla fine della linea? L'ho cercato per un po 'di tempo. – Bionix1441

+0

@ Bionix1441 'scanf' legge solo la quantità di caratteri da' stdin' (e 'fscanf' da file), come è necessario per soddisfare la stringa di formato. Se stai ricevendo valori errati nelle variabili, ciò significa che ottieni un errore che corrisponde al formato. Controlla il valore restituito. Se non aiuta, immagino sia necessario pubblicare una domanda appropriata con degli esempi. –