Verkrijg tekst van gebruikersinvoer met C

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 %sgebruiken. Gebruik nog steeds fgets – scanf is niet bufferveilig.

De documentatie doornemen, het zou niet zo moeilijk moeten zijn:

scanfen fgets

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 %sgebruikt. En het adres wordt gegeven waar de stringmoet worden opgeslagen.

scanf("%s",name);
printf("%s",name);

hoor naam geeft u het base addressvan arraynaam. De waarde van nameen &namezou equalzijn, maar er is een groot verschil tussen beide. namegeeft het base addressvan arrayen als je name+1berekent, krijg je next addressdwz adres van name[1]maar als u &name+1uitvoert, zal het next addresszijn 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

Other episodes