On m'a demandé de faire un travail en C quand je suis supposé lire à partir d'une entrée jusqu'à ce qu'il y ait un espace, puis jusqu'à ce que l'utilisateur appuie sur Entrée. Si je fais ça:
scanf("%2000s %2000s", a, b);
Il suivra la 1ère règle mais pas la 2ème.
Si j'écris:
Je suis intelligent
Ce que je reçois équivaut à:
a = "I";
b = "am";
Mais cela devrait être:
a = "I";
b = "suis intelligent";
J'ai déjà essayé:
scanf("%2000s %2000[^\n]\n", a, b);
et
scanf("%2000s %2000[^\0]\0", a, b);
Dans le premier, il attend que l'utilisateur appuie sur Ctrl+D (envoyer EOF) et ce n'est pas ce que je veux. Dans le second, cela ne compilera pas. Selon le compilateur:
avertissement: pas de fermeture ']' pour le format '% ['
Un bon moyen de résoudre ce problème?
scanf
(et les cousins) ont une caractéristique légèrement étrange: tout espace blanc dans la chaîne de format (en dehors d'un scanset) correspond à une quantité arbitraire d'espace blanc dans l'entrée. En réalité, au moins dans les paramètres régionaux "C" par défaut, une nouvelle ligne est classée dans les espaces.
Cela signifie que le '\n'
final essaye de faire correspondre non seulement une nouvelle-ligne, mais également tout espace blanc qui le suit. Il ne sera pas considéré comme correspondant jusqu'à ce que vous signaliez la fin de l'entrée ou entrez un caractère non blanc.
Pour faire face à cela, vous voulez généralement faire quelque chose comme ceci:
scanf("%2000s %2000[^\n]%c", a, b, c);
if (c=='\n')
// we read the whole line
else
// the rest of the line was more than 2000 characters long. `c` contains a
// character from the input, and there's potentially more after that as well.
scanf("%2000s %2000[^\n]", a, b);
utiliser getchar et un moment qui ressemble à ceci
while(x = getchar())
{
if(x == '\n'||x == '\0')
do what you need when space or return is detected
else
mystring.append(x)
}
Désolé si j'ai écrit un pseudo-code mais je ne travaille pas avec le langage C depuis un moment.
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
int main(void)
{
int i = 0;
char *a = (char *) malloc(sizeof(char) * 1024);
while (1) {
scanf("%c", &a[i]);
if (a[i] == '\n') {
break;
}
else {
i++;
}
}
a[i] = '\0';
i = 0;
printf("\n");
while (a[i] != '\0') {
printf("%c", a[i]);
i++;
}
free(a);
getch();
return 0;
}
Je suis trop tard, mais vous pouvez aussi essayer cette approche.
#include <stdio.h>
#include <stdlib.h>
int main() {
int i=0, j=0, arr[100];
char temp;
while(scanf("%d%c", &arr[i], &temp)){
i++;
if(temp=='\n'){
break;
}
}
for(j=0; j<i; j++) {
printf("%d ", arr[j]);
}
return 0;
}
Cela ressemble à un problème de devoirs. scanf () est la mauvaise fonction à utiliser pour résoudre le problème. Je recommanderais getchar () ou getch ().
Remarque: je ne résous pas intentionnellement le problème car cela semble être un devoir, mais vous indique simplement la bonne direction.