De votre question, il semble que vous ne soyez pas intéressé par le fait qu'il y a plus d'un espace, mais juste un moyen de les analyser.
Ne craignez pas! Un caractère espace unique dans *scanf
ignore déjà tous les espaces (y compris '\n'
, '\r'
, '\t'
et dans les paramètres régionaux «C»). Donc, dans la forme la plus simple, vous pouvez lire comme ceci:
scanf("%s %s", str1, str2);
Bien sûr, vous auriez besoin de vérifier les erreurs. Un moyen sûr serait:
char str1[100];
char str2[100];
scanf("%99s", str1);
ungetc('x', stdin);
scanf("%*s");
scanf("%99s", str2);
ungetc('x', stdin);
scanf("%*s");
Ce qui est une manière généralement sûre (non liée à votre question particulière). Ignorez ce qui reste de la chaîne (le cas échéant) ungetc
+ scanf("%*s")
Notez que vous n'avez pas besoin d'espace avant la seconde scanf("%99s")
parce que scanf
ignore déjà tous les espaces avant %s
(et en fait avant tous %*
sauf %c
et %[
).
Si vous voulez vraiment vous assurer qu'il ya au moins deux espaces, et vous insistez sur l'utilisation scanf
, vous pouvez faire comme ceci:
char str1[100];
char str2[100];
char c;
scanf("%99s", str1);
ungetc('x', stdin);
scanf("%*s");
scanf("%c", &c);
if (c != ' ')
goto exit_not_two_spaces;
scanf("%c", &c);
if (c != ' ')
goto exit_not_two_spaces;
scanf("%99s", str2);
ungetc('x', stdin);
scanf("%*s");
return /* success */
exit_not_two_spaces:
ungetc(c, stdin);
return /* fail */
Ce sont trois chaînes, pas deux. Pour lire plusieurs caractères sans tenir compte des espaces, vous pouvez utiliser fgets(), puis analyser toute la chaîne. –
Pour détecter deux espaces consécutifs, vous pouvez utiliser la fonction ['strstr()'] (http://en.cppreference.com/w/c/string/byte/strstr). – hmjd