Pobieranie danych od użytkownika w języku C

0

Napisałem sobie prosty program, który ma za zadanie pobierać od użytkownika imie i nazwisko. Oto kod:

#include<stdio.h>
#include<string.h>
int main()
{
char imie[13];
	char nazwisko[100];
	printf("Podaj swoje imie\n");
	scanf("%s", imie);
	printf("Podaj swoje nazwisko\n");
	scanf("%s", nazwisko);
	printf("Imie:%s\n", imie);
	printf("Naziwsko:%s\n", nazwisko);
	return 0;
}

I teraz moje pytanie w tym miejscu. Czy jest jakiś sensowniejszy sposób na pobieranie danych od użytkownika w języku C niż zapisywanie tego do tablicy i ustawianie na sztywno wartości liczbowych w tych nawiasach. Nie chce na sztywno nic ustawiać tylko dać użytkownikowi możliwość wpisania dowolnej liczby znaków. Jestem początkujący jeśli chodzi o C. Nie chce innego kodu, którego nie będę rozumiał tylko chce usprawnić to co mam tu.

1

Jeżeli to koniecznie musi być c, a nie c++, i nie możesz użyć jakiejś biblioteki zewnętrznej, to musisz czytać po kawałku i robić reallokacje pamięci.

Ewentualnie, jeżeli czytasz z pliku, przeskanować input w celu wyliczenia długości potrzebnego bufora, po czym zresetować pozycję w pliku, alokacja i wczytać.

4

Ew. możesz skorzystać z rozszerzenia biblioteki i w format stringu scanfa przekazać m, wtedy alokacją zajmie się scanf, przy czym to nie wszędzie musi być dostępne: https://man7.org/linux/man-pages/man3/scanf.3.html

0

Można, przynajmniej nie nastąpi mazanie po pamięci jeżeli użyszkodnik poda więcej znaków niż bufor przewiduje.

#include<stdio.h>
#include<string.h>
int main()
{
char imie[13];
    char nazwisko[100];
    printf("Podaj swoje imie\n");
    scanf("%12s", imie);
    printf("Podaj swoje nazwisko\n");
    scanf("%99s", nazwisko);
    printf("Imie:%s\n", imie);
    printf("Naziwsko:%s\n", nazwisko);
    return 0;
}
0

@_13th_Dragon: Tylko czy w przypadku tych zmiennych

char imie[13];
    char nazwisko[100];

zamiast zapisać tak jak wyżej to czy mogę zapisać to tak?

char imie[];
    char nazwisko[];
0
piotrek1998 napisał(a):

@_13th_Dragon: Tylko czy w przypadku tych zmiennych

char imie[13];
    char nazwisko[100];

zamiast zapisać tak jak wyżej to czy mogę zapisać to tak?

char imie[];
    char nazwisko[];

Nie!
Ale możesz za pomocą malloc wczytywać kawałkami (np po 512b) po doczytaniu do entera skleić całość w jeden blok, po czym zwolnić kawałki.

1 użytkowników online, w tym zalogowanych: 0, gości: 1