CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

Probleme itération en C

ProbaRiche
ProbaRiche
Niveau 8
16 avril 2022 à 18:20:26

Salut, j'essaye de faire un mini prog qui passe des string entrées a la lettre suivante
exemple: abz ABZ
bca BCA
ça fonctionne avec une chaine de caractere sauf que si il y'a un espace mon prog ne fait juste rien alors que j'ai fait une iteration dans ma boucle pour que ça le fasse jusqu'a la fin.

En gros, ça marche que si mon nombre d'arguments est de 2 (en comptant celui de base)
ABC
BCD
la ça marcherait, parcontre avec un espace donc 3 arguments en total bah ça ne m'affiche tout simplement rien :(

Quelqu'un pourrait m'éclairer sur le pb ? merci

#include <stdio.h>
#include <stdlib.h>

char    get_char(char j)
{
        char c;
        c = j;

        if (c == 'z')
        {
                c = 'a';
        }
        else if (c == 'Z')
        {
                c = 'A';
        }
        else if ((c >= 'a' && c <= 'y') || (c >= 'A' && c <= 'Y'))
        {
                c = j + 1;
        }
        return (c);
}

int     main(int ac, char **av)
{
        char c;

        if (ac == 2)
        {
                while (*av[1])
                {
                        c = get_char(*av[1]);
                        printf("%c", c);
                        av[1]++;
                }
        printf("\n");
        return (0);
        }
}
 
ProbaRiche
ProbaRiche
Niveau 8
16 avril 2022 à 18:25:07

Je viens d'essayer de rajouter dans ma fonction get_char()

else if (c == ' ')
{
         c++;
}

Mais ça marche pas non plus :(

ProbaRiche
ProbaRiche
Niveau 8
16 avril 2022 à 18:26:52

J'ai aussi changé

 if (ac == 2)

en:

 if (ac >= 2)

Et maintenant même si j'ai plusieurs arguments ça s'affiche mais ça n'affiche rien aprés l'espace, que le premier argument

de_nada_cono
de_nada_cono
Niveau 10
16 avril 2022 à 19:37:46

j'ai pas compris ce que tu voulais que ça fasse si par exemple tu passe
ABC BCD en paramètre

tu espère avoir BCD CCD ?

Message édité le 16 avril 2022 à 19:38:30 par de_nada_cono
godrik
godrik
Niveau 30
16 avril 2022 à 20:26:42

Le 16 avril 2022 à 18:26:52 :
J'ai aussi changé

 if (ac == 2)

en:

 if (ac >= 2)

Et maintenant même si j'ai plusieurs arguments ça s'affiche mais ça n'affiche rien aprés l'espace, que le premier argument

tu as une boucle qui itere sur les charactere du premier parametre. Il te faut une autre boucle pour iterer sur les different parametres.

ProbaRiche
ProbaRiche
Niveau 8
16 avril 2022 à 20:28:48

Le 16 avril 2022 à 19:37:46 :
j'ai pas compris ce que tu voulais que ça fasse si par exemple tu passe
ABC BCD en paramètre

tu espère avoir BCD CCD ?

j'espere avoir BCD CDE

de_nada_cono
de_nada_cono
Niveau 10
16 avril 2022 à 20:29:35

ça devrait faire ce que tu veux

char get_char(char j)
{
    if (j == 'z')  j = 'a';
    else if (j == 'Z') j = 'A';
    else if ((j >= 'a' && j <= 'y') || (j >= 'A' && j <= 'Y')) j++;
    return j;
}

int main(int ac, char** av)
{
     for (size_t i = 1; i < ac; i++)
         for (size_t j = 0; j < sizeof(av) / sizeof(*av[0]); j++)
           printf("%c\n", get_char(av[i][j]));

    return 0;
}
Message édité le 16 avril 2022 à 20:34:01 par de_nada_cono
ProbaRiche
ProbaRiche
Niveau 8
16 avril 2022 à 20:35:53

Le 16 avril 2022 à 20:26:42 :

Le 16 avril 2022 à 18:26:52 :
J'ai aussi changé

 if (ac == 2)

en:

 if (ac >= 2)

Et maintenant même si j'ai plusieurs arguments ça s'affiche mais ça n'affiche rien aprés l'espace, que le premier argument

tu as une boucle qui itere sur les charactere du premier parametre. Il te faut une autre boucle pour iterer sur les different parametres.

j'ai essayé de rajouter la même loop en dessous de l'autre mais en condition j'ai mis:
if (ac > 2)
et ça ne marche toujours pas :/
ça me fait comme si j'avais fait dans la premiere loop:
if (ac >= 2)

ProbaRiche
ProbaRiche
Niveau 8
16 avril 2022 à 20:37:22

Le 16 avril 2022 à 20:29:35 :
ça devrait faire ce que tu veux

char get_char(char j)
{
    if (j == 'z')  j = 'a';
    else if (j == 'Z') j = 'A';
    else if ((j >= 'a' && j <= 'y') || (j >= 'A' && j <= 'Y')) j++;
    return j;
}

int main(int ac, char** av)
{
     for (size_t i = 1; i < ac; i++)
         for (size_t j = 0; j < sizeof(av) / sizeof(*av[0]); j++)
           printf("%c\n", get_char(av[i][j]));

    return 0;
}

Salut, merci pour le code mais a 42 l'utilisation de la loop for est interdite, j'aimerais pouvoir faire la même chose en utilisant while.

godrik
godrik
Niveau 30
16 avril 2022 à 20:49:29

probariche,

Le code qu'il te donne devrait te mettre sur le bon chemin. Il te faut deux boucles. Une pour iterer sur les arguments, et une autre pour iterer sur les lettres de l'argument.

Arthfael
Arthfael
Niveau 24
16 avril 2022 à 20:55:49

Le 16 avril 2022 à 20:29:35 :
ça devrait faire ce que tu veux

char get_char(char j)
{
    if (j == 'z')  j = 'a';
    else if (j == 'Z') j = 'A';
    else if ((j >= 'a' && j <= 'y') || (j >= 'A' && j <= 'Y')) j++;
    return j;
}

int main(int ac, char** av)
{
     for (size_t i = 1; i < ac; i++)
         for (size_t j = 0; j < sizeof(av) / sizeof(*av[0]); j++)
           printf("%c\n", get_char(av[i][j]));

    return 0;
}

par contre sizeof(av) / sizeof(*av[0]) ça va pas marcher ça, c'est strlen(av[i]) qu'il faudrait à la place

Le 16 avril 2022 à 20:37:22 :

Le 16 avril 2022 à 20:29:35 :
ça devrait faire ce que tu veux

char get_char(char j)
{
    if (j == 'z')  j = 'a';
    else if (j == 'Z') j = 'A';
    else if ((j >= 'a' && j <= 'y') || (j >= 'A' && j <= 'Y')) j++;
    return j;
}

int main(int ac, char** av)
{
     for (size_t i = 1; i < ac; i++)
         for (size_t j = 0; j < sizeof(av) / sizeof(*av[0]); j++)
           printf("%c\n", get_char(av[i][j]));

    return 0;
}

Salut, merci pour le code mais a 42 l'utilisation de la loop for est interdite, j'aimerais pouvoir faire la même chose en utilisant while.

int     main(int ac, char **av)
{
	char c;

	while (*++av)
	{
		char *s = *av;
		while (*s) {
			c = get_char(*s++);
			printf("%c", c);
		}
		printf("\n");
	}

	return (0);
}
ProbaRiche
ProbaRiche
Niveau 8
16 avril 2022 à 21:22:14

Le 16 avril 2022 à 20:55:49 :

Le 16 avril 2022 à 20:29:35 :
ça devrait faire ce que tu veux

char get_char(char j)
{
    if (j == 'z')  j = 'a';
    else if (j == 'Z') j = 'A';
    else if ((j >= 'a' && j <= 'y') || (j >= 'A' && j <= 'Y')) j++;
    return j;
}

int main(int ac, char** av)
{
     for (size_t i = 1; i < ac; i++)
         for (size_t j = 0; j < sizeof(av) / sizeof(*av[0]); j++)
           printf("%c\n", get_char(av[i][j]));

    return 0;
}

par contre sizeof(av) / sizeof(*av[0]) ça va pas marcher ça, c'est strlen(av[i]) qu'il faudrait à la place

Le 16 avril 2022 à 20:37:22 :

Le 16 avril 2022 à 20:29:35 :
ça devrait faire ce que tu veux

char get_char(char j)
{
    if (j == 'z')  j = 'a';
    else if (j == 'Z') j = 'A';
    else if ((j >= 'a' && j <= 'y') || (j >= 'A' && j <= 'Y')) j++;
    return j;
}

int main(int ac, char** av)
{
     for (size_t i = 1; i < ac; i++)
         for (size_t j = 0; j < sizeof(av) / sizeof(*av[0]); j++)
           printf("%c\n", get_char(av[i][j]));

    return 0;
}

Salut, merci pour le code mais a 42 l'utilisation de la loop for est interdite, j'aimerais pouvoir faire la même chose en utilisant while.

int     main(int ac, char **av)
{
	char c;

	while (*++av)
	{
		char *s = *av;
		while (*s) {
			c = get_char(*s++);
			printf("%c", c);
		}
		printf("\n");
	}

	return (0);
}

merci !!
Il faut donc faire une pré iteration et une iteration dans le parametre de la fonction appelé ?

ProbaRiche
ProbaRiche
Niveau 8
16 avril 2022 à 21:24:19

Le 16 avril 2022 à 20:49:29 :
probariche,

Le code qu'il te donne devrait te mettre sur le bon chemin. Il te faut deux boucles. Une pour iterer sur les arguments, et une autre pour iterer sur les lettres de l'argument.

Ahhhh ok !
je vais essayer avec le meme code que j'avais

Sous forums
  • Aide à l'achat Mac
  • Création de Jeux
  • Linux
  • Programmation
  • Création de sites web
  • Internet
  • Steam Deck
  • Macintosh
  • Hardware
La vidéo du moment