Ograniczanie String'a

0

Witam, mam za zadanie
Napisz program, który pyta użytkownika o jego imię, a następnie wyświetla tekst powitalny

Witaj (...)!

gdzie zamiast (...) program wyświetla pobrane imię. Załóż, że długość imienia nie przekroczy 30 znaków.

Jednak mam problem z warunkiem w if

#include <stdio.h>

int main(void)
{
    int spr = 0;
    char imie[30];

    printf("Prosze podaj imie: ");
    scanf("%s", imie);
    for (int i = 0; i < 30; i++) {
        if (imie[i] >= 'a' && imie[i] <= 'Z') {
        }
        else if (imie[i] == '\0') {
            i = 30;
        }
        else if (imie[i] < 'a' || imie[i] > 'Z') {
            printf("Incorrect input");
            return 1;
        }
    }
    printf("Witaj %s!", imie);

    return 0;
}

Które nie działają albo źle, w zeszłym roku jak pisałem tak w C++, to chyba działało sprawdzenie, albo trzeba było coś dodać jeszcze
Jak mogę przerobić żeby sprawdzało czy są to litery a nie np cyfry lub białe znaki.

5

użyj isalpha z <ctype.h>

Ponadto ograniczenie długości musisz zrobić przy wczytywaniu, a nie po. Jak zapiszesz więcej niż 30 znaków do tablicy 30-znakowej to mażesz po pamięci i masz UB i już w tym momencie program jest niepoprawny.

2

@kq: podał poprawną odpowiedź, Twoja wersja natomiast nie działa, gdyż 'Z' < 'a', a nie na odwrót.

1

Zamień

if (imie[i] >= 'a' && imie[i] <= 'Z') {

na

if (
  (imie[i] >= 'a' && imie[i] <= 'z') || 
  (imie[i] >= 'A' && imie[i] <= 'Z')
) {

oraz

else if (imie[i] < 'a' || imie[i] > 'Z') {

na

else {
0

Mam problem że jeśli wprowadzam jako %s przed for to nie potrafię ograniczyć do 30 znaków i po wprowadzeniu więcej wyrzuca poza zakres, a jeśli jako %c w for to nie potrafię znaleźć końca string'a

#include <stdio.h>

int main(void)
{

    char imie[30];
    int licz = 0;

    printf("Prosze podaj imie: ");
    scanf("%s", imie);
    for (int i = 0; i < 30; i++) {

        if ((imie[i] >= 'a' && imie[i] <= 'z') || (imie[i] >= 'A' && imie[i] <= 'Z')) {
            licz++;
        }
        else if (imie[i] == '\0') {
            break;
        }

        else {
            printf("Incorrect input");
            return 1;
        }
    }

    printf("Witaj ");
    for (int i = 0; i < licz; i++) {
        printf("%c", imie[i]);
    }

    printf("!");
    return 0;
}

kod który wychodzi poza zakres :/

0

A no tak, tak samo jak przy printf, jeszcze tak poza tym zadaniem, kiedyś się zastanawiałem jak uzupełnić np 300.240, 30.240, 3.240 żeby dało 300.240, 030.240, 003.240. To jest chyba jeden ze sposobów formatowania.

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