6 svar
187 visningar
Josanna är nöjd med hjälpen
Josanna 28
Postad: 10 nov 2021 15:54

scanf

Jag har aldrig programmerat förut så kommer säkert ställa många dumma frågor. Men här är ett exempel på scanf 

#include <stdio.h>
int main()
{
int samplen = 32;
float kelvin = 150;
char label[32];
scanf("%d %f %s", &samplen, &kelvin, label);

}

men är det meningen att den här funktionen(?) ska utföra något? Det händer inget när jag kör den.

Laguna 28468
Postad: 10 nov 2021 16:07 Redigerad: 10 nov 2021 16:08

Den fyller i data i samplen, kelvin och label. Sedan får du göra något med dem.

Funktion stämmer.

 

Lindehaven 820 – Lärare
Postad: 10 nov 2021 16:52 Redigerad: 10 nov 2021 16:53

Vi kan inte svara på vad funktionen main() är menat att göra. Vad tycker du själv? Är det en uppgift du ska lösa?

När programmet startas så körs funktionen main() och du kan då mata in tre värden separerade med mellanslag. Programmet gör sedan ingenting mer utan avslutas. Om du vill att programmet ska göra något mer behöver du skriva mer kod.

Till exempel kan du skriva ut de värden som matades in så att du ser att något händer:

#include <stdio.h>
int main()
{
    int samplen = 32;
    float kelvin = 150;
    char label[32];
    scanf("%d %f %s", &samplen, &kelvin, label);
    printf("%d %f %s", samplen, kelvin, label);
}
Josanna 28
Postad: 10 nov 2021 20:53

Om jag skriver som ovan så händer inget, men tar jag bort %s och label så skriver den 32 150.000

alltså

#include <stdio.h>
int main()
{
int samplen = 32;
float kelvin = 150;
char label[32];
scanf("%d %f %s", &samplen, &kelvin, label);
printf("%d %f", samplen, kelvin);
}

32  150.00000

Det är ingen uppgift det stod bara exempel på scanf.

char label[32] vad står det för?

Programmeraren 3387
Postad: 10 nov 2021 21:16 Redigerad: 10 nov 2021 22:07

scanf läser in text och tolkar den enligt specifikationen du angett.

När du kör programmet ska programmet stanna på den raden så du kan mata in en rad med de sakerna. Var du kan mata in beror på vilken utvecklingsmiljö du kör programmet i men meningen är att scanf ska läsa in raden. Om det inte funkar är det något med din miljö som trasslar eller som du inte förstått. Det har inget med själva programmeringen att göra men du bör få det att funka först.

Visa spoiler

"%d %f %s" betyder att den förväntar sig ett heltal (d), ett decimaltal (f) och sen text (s).
scanf() lagrar sen de 3 sakerna i dina 3 variabler. På nästa rad skriver programmet ut värdena på variablerna, dvs de värden som raden innan läste in.
char label[32]
Skapar variabeln "label" som kan lagra max 32 tecken

.

 

Laguna 28468
Postad: 10 nov 2021 21:27

Jag rekommenderar att du aldrig (nej, aldrig) använder scanf, utan i stället läser in en rad i taget och använder sscanf på den.

Fermatrix 7841 – Fd. Medlem
Postad: 10 nov 2021 21:50
Lindehaven skrev:

Vi kan inte svara på vad funktionen main() är menat att göra. Vad tycker du själv? Är det en uppgift du ska lösa?

När programmet startas så körs funktionen main() och du kan då mata in tre värden separerade med mellanslag. Programmet gör sedan ingenting mer utan avslutas. Om du vill att programmet ska göra något mer behöver du skriva mer kod.

Till exempel kan du skriva ut de värden som matades in så att du ser att något händer:

#include <stdio.h>
int main()
{
    int samplen = 32;
    float kelvin = 150;
    char label[32];
    scanf("%d %f %s", &samplen, &kelvin, label);
    printf("%d %f %s", samplen, kelvin, label);
}

Inget fel på koden ovan given av Lindehaven.

char label[32] kan du se som en "sträng" som är av längd 32. Men om jag inte minns helt fel så är den sista karaktären en 0:a, detta eftersom den är null terminated, dock så måste den inte vara det men i just detta fallet så är jag rätt säker på att den är de. 


Tillägg: 10 nov 2021 21:53

Det kan vara en bra idé att läsa om pekare, annars kan det verka konstigt varför du måste skriva &variabel. Om du är helt ny så kan det dock vara väldigt förvirrande med pekare, men det är något du inte kommer kunna undvika i C.

Svara Avbryt
Close