Ik ben net C aan het leren en maak een standaard “hallo, NAAM”-programma. Ik heb het werkend gekregen om de invoer van de gebruiker te lezen, maar het wordt weergegeven als getallen en niet als wat ze invoeren?
Wat doe ik verkeerd?
#include <stdio.h>
int main()
{
char name[20];
printf("Hello. What's your name?\n");
scanf("%d", &name);
printf("Hi there, %d", name);
getchar();
return 0;
}
Antwoord 1, autoriteit 100%
U gebruikt de verkeerde formaatspecificatie %d
– u moet %s
gebruiken. Gebruik nog steeds fgets – scanf is niet bufferveilig.
De documentatie doornemen, het zou niet zo moeilijk moeten zijn:
Voorbeeldcode:
#include <stdio.h>
int main(void)
{
char name[20];
printf("Hello. What's your name?\n");
//scanf("%s", &name); - deprecated
fgets(name,20,stdin);
printf("Hi there, %s", name);
return 0;
}
Invoer:
The Name is Stackoverflow
Uitvoer:
Hello. What's your name?
Hi there, The Name is Stackov
Antwoord 2, autoriteit 26%
#include <stdio.h>
int main()
{
char name[20];
printf("Hello. What's your name?\n");
scanf("%s", name);
printf("Hi there, %s", name);
getchar();
return 0;
}
Antwoord 3, autoriteit 4%
Als we de invoer als een tekenreeks van de gebruiker nemen, wordt %s
gebruikt. En het adres wordt gegeven waar de string
moet worden opgeslagen.
scanf("%s",name);
printf("%s",name);
hoor naam geeft u het base address
van array
naam. De waarde van name
en &name
zou equal
zijn, maar er is een groot verschil tussen beide. name
geeft het base address
van array
en als je name+1
berekent, krijg je next address
dwz adres van name[1]
maar als u &name+1
uitvoert, zal het next address
zijn om de whole array
.
Antwoord 4
wijzig uw code in:
int main()
{
char name[20];
printf("Hello. What's your name?\n");
scanf("%s", &name);
printf("Hi there, %s", name);
getchar();
getch(); //To wait until you press a key and then exit the application
return 0;
}
Dit komt omdat %d wordt gebruikt voor datatypes met gehele getallen en %s en %c worden gebruikt voor string- en tekentypes