EDIT:
Premièrement, vous avez omis l'argument de longueur requis par scanf_s
pour les formats %c
et %s
.
Ensuite, le format %c
prend le caractère suivant à partir du tampon d'entrée. À la deuxième entrée (et aux suivantes), il restait un newline
dans le tampon d'entrée de la première entrée. L'ajout d'un space
avant que le spécificateur de format %c
supprime cet espace de début.
D'autres formats, tels que %s
et %d
font ignorer les espaces au, mais pas %c
.
En troisième lieu, avec scanf
l'utilisation de EOF
n'est pas le chemin à parcourir, vous devez contrôler la boucle avec la valeur de retour de scanf
qui vous indique le nombre d'éléments correctement lus. Ce programme commence par scanf_s
. La deuxième entrée ignore la newline
après la première entrée.
Ensuite, il passe à getchar
. Dans ce test, la valeur de retour de la fonction est int
, donc c'est mon type de données ici. De cette façon, EOF
(-1) ne sera pas en conflit avec les données de caractères requises. Notez que getchar
commence par lire le newline
laissé après le scanf_s
précédent (qui ignore seulement menant espace.
#include <stdio.h>
int main(void)
{
char ch_scanf; // char type
int ch_getchar; // int type
printf("Using scanf_s\n");
if (scanf_s(" %c", &ch_scanf, 1) == 1) { // consumes any leading whitespace
printf("scanf_s value: %d\n", ch_scanf);
}
if (scanf_s(" %c", &ch_scanf, 1) == 1) { // consumes any leading whitespace
printf("scanf_s value: %d\n", ch_scanf);
}
printf("\nUsing getchar\n");
while ((ch_getchar = getchar()) != EOF) {
printf("getchar value: %d\n", ch_getchar);
}
return 0;
}
Exemple de session:
Using scanf_s
A
scanf_s value: 65
B
scanf_s value: 66
Using getchar
getchar value: 10
C
getchar value: 67
getchar value: 10
^Z
Enfin, si vous souhaitez utiliser la fonction de bibliothèque standard scanf
sans MSVC vous cochant, vous pouvez le faire comme ça
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
'' tempString' doit être int' – pzaenger
'char tempString; ' - >> 'int tempString;' dans le deuxième ptogramme. Dans le premier programme, vous pouvez vérifier le retour de scanf(). (et scanf_s() est un non-sens) – wildplasser
@wildplasser scanf_s est le terme pour les studios visuels –