Muszę rozpoznać, jeśli postać wykonana jako wejście jest przestrzeń lub wejdź. Wiem, że wejście jest "0x0a" jako szesnastkowy, podczas gdy przestrzeń jest "0x20", ale nie Kown, dlaczego Skanf wydaje się nie rozpoznawać miejsca.

while ( (error=scanf("%d", &stop) )== EOF && error==0 )
  printf("Error while reading the value input, try again\n");
...(some code)...
while ( stop!= 0x0A )
{
    if (stop == 0x20) {
        printf("Going to fill the line\n");
    ...(some code)...
 }

Wraz z pierwszym "podczas" Chcę, aby użytkownik wstawia wartość ogólną, w 2ND sprawdzić, czy wartość była "Enter" i "Jeśli" sprawdza, czy włożono "Space". Jeśli naciskam "przestrzeń", jest błąd segmentacji, nie wiem dlaczego: s

EDYTOWAĆ :

Napisałem ten nowy przykład z tego, co czytałem w uwagach:

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

void main()
{
    char input;
    int error =0;
    printf("I want to read only numbers\n" 
        "Let's start!\n");
    while ( (error=scanf("%c", &input) )== EOF || error==0 )
        printf("Error while reading the input, maybe Enter was pressed try again\n");
        printf("input is : %c \n",input);
        printf("Taking new input : \n");
   while (input != "\n")
   {
       if (input == 0x20)
          break;
          printf("Taking New input : \n");
       while ( (error=scanf("%c", &input) )== EOF || error==0 )
        printf("Error while reading the input, maybe Enter was pressed try again\n");
        printf("New input is : %c \n",input);
   }
   return;
}

To jest wyjście:

I want to read only numbers
Let's start!
7
input is : 7 
Taking New input : 
New input is : 

A program się kończy.

c
2
Finley Adams 21 październik 2020, 18:59

1 odpowiedź

Najlepsza odpowiedź

Dlaczego SCANF wydaje się nie rozpoznawać przestrzeni.

scanf() można rozpoznać przestrzenie, ale nie łatwo przy użyciu scanf("%d", &stop) jako "%d" najpierw zużywa i odrzuca wszystkie wiodące białe miejsce.

"%c" nie wyrzuca wiodącego białego znaku. Jedna postać jest czytana.


Ponieważ OP wydaje się zainteresowany czytaniem i testującą pojedynczą postać jedną jednocześnie przy użyciu scanf(), wraz z wykrywaniem rzadkiego błędu wejściowego i może zakończenie pliku:

// Read one character.
// Return 1 on success.
// Return EOF on end-of-file.
// Return 0 on rare input error.
int read1(char *dest) {
  if (scanf("%c", dest) == 1) return 1;
  if (feof(stdin)) return EOF;
  return 0;
}

potrzeba rozpoznania, jeśli postać wykonana jako wejście jest przestrzeń lub wejdź

fgets() jest lepszym podejściem do czytania wejścia użytkownika

char buf[100];
if (fgets(buf, sizeof buf, stdin)) {
  // Use buf
}  
1
chux - Reinstate Monica 21 październik 2020, 17:22