2017-10-08 7 views
-6

Comment convertir la boucle for ci-dessous en boucle while?Comment convertir une boucle en boucle while?

for (j = 0; s1[j] != '\0'; j++, i++) 
    sen[i] = s1[j]; 

J'ai essayé de convertir, mais a obtenu un résultat vide, pas sûr de ce qui ne va pas avec ceci:

while (j= 0, s1[j] != '\0') { 
    j++, i++; 
    sen[i] = s1[j]; 
} 

Le code original est ci-dessous:

#include <stdio.h> 
#include <stdafx.h> 

int main() 
{ 
    char s[] = "Bad"; 
    char s1[] = "weather!"; 
    char sen[10]; 
    int i, j; 
    for (i = 0; i<20; ++i){ 
     if (s[i] != '\0') 
      sen[i] = s[i]; 
     else { 
      sen[i++] = ' '; 
      for (j = 0; s1[j] != '\0'; j++, i++) 
       sen[i] = s1[j]; 
      break; 
     } 
    } 
    sen[i] = '\0'; 
    puts(sen); 
} 
+0

Prenez le temps de lire comment utiliser la boucle while. Cela pourrait vous aider: https://en.wikipedia.org/wiki/While_loop – Cherubim

+0

Au lieu d'écrire 'while'-loops, peut-être que vous devriez lire sur [' strcpy'] (http://en.cppreference.com/ w/c/string/octet/strcpy) et ['strcat'] (http://en.cppreference.com/w/c/string/byte/strcat). –

Répondre

0
j = 0; 

while(s1[j] != '\0') 
{ 
    sen[i] = s1[j]; 
    i++; 
    j++; 
} 
+0

Merci pour votre aide. –

+1

@SamaelSaverem si la réponse est bonne, alors vous devriez le voter. Si cela a résolu votre question, vous devriez l'accepter. – bolov

+0

Quelle 'break' est toujours exécutée ici? –

0

Mon général prendre le langage C for déclaration est qu'il s'agit d'une version compacte de l'instruction while. Il y a quelques petites différences lors de l'utilisation continue, mais à part cela, c'est la conversion bijective générale:

for (expr1 ; expr2 ; expr3) { 
    statements; 
} 

devient

expr1; 
while (expr2) { 
    statements; 
    expr3; 
} 

Donc, si vous appliquez cela à votre cas:

for (j = 0; s1[j] != '\0'; j++, i++) 
sen[i] = s1[j]; 

vous obtenez que

expr1  <==> j = 0 
expr2  <==> s1[j] != '\0' 
expr3  <==> j++, i++ 
statements <==> sen[i] = s1[j]; 

donc la conversion est la même que celle suggérée par @ user2233706.

j = 0; 
while (s1[j] != '\0') { 
    sen[i] = s1[j]; 
    j++, i++; 
} 

Quoi qu'il en soit, le code d'origine est terrible pour un long ensemble d'erreurs. Elle nous allons:

  • #include <stdafx.h> -> ne l'utilisez pas pour le code C sous Visual Studio. Préférez les projets vides pour les rendre portables. (mon opinion)
  • int main() -> devrait être int main(void) être standard.
  • char sen[10]; -> ce tableau peut contenir 9 caractères plus un terminateur. "Bad weather!" nécessite 12 plus un terminateur.
  • for (i = 0; i<20; ++i){ -> pourquoi 20?
  • s[i] != '\0' -> Faites-vous une faveur: écrivez-le en s[i] != 0, pour souligner que ce n'est pas une valeur magique. Est-ce juste un 0. (mon avis)
  • sen[i] = s[i]; -> vous n'avez pas vérifié si i est inférieure à la taille de sen
  • le for dans le else est totalement indépendant de l'externe, alors pourquoi les imbriquant ?