Getint que maneja adecuadamente + o - Signos -- amp codereview Relacionados El problema

getint that properly handles + or - signs


2
vote

problema

Español

Como se escribe, getint trata a + o, no seguido de un dígito como una representación válida de cero. Fijelo para empujar un carachador de nuevo en la entrada.

Antes del buildResourcePath3 Voy a verificar si el Charachter después del + o - es un número. Si es así, la función almacenará la representación de ese número en * PN. Si no lo es, empujará hacia atrás que la entrada de la entrada en la entrada, tal que, cada vez que se llama a Getint. Lea ese carachador y empuje hacia atrás.

Aquí está mi solución:

  buildResourcePath4  
Original en ingles

As written, getint treats a + or - not followed by a digit as a valid representation of zero. Fix it to push such a charachter back on the input.

Before the for I check if the charachter after the + or - is a number. If it is, the function will store the representation of that number in *pn. If it is not, it will push back that characther back on the input - such that, everytime the getint is called it will read that charachter and push it back.

Here is my solution:

int getint(int *pn) {     int c, sign;     while(isspace(c = getch()))         ;     if(!isdigit(c) && c != EOF && c != '+' && c != '-') {         ungetch(c);         return 0;     }      sign = (c == '-') ? -1 : 1;     if(c == '+' || c == '-')         c = getch();      if(!isdigit(c)) {         ungetch(c);         return 0;     }      for(*pn = 0; isdigit(c); (c = getch()))         *pn = 10 * *pn + (c - '0');     *pn *= sign;     if(c != EOF)         ungetch(c);     return c; } 
  

Lista de respuestas

2
 
vote
vote
La mejor respuesta
 
  1. El método modifica el parámetro mientras está procesando la entrada. Debe almacenar el resultado de procesamiento localmente y luego asignarlo una vez que haya terminado.

  2. No está claro cuál significa el valor de retorno del método solo al leer el código. Si se supone que indica el éxito (la devolución no es 0) o la falla (el valor de retorno es 0), entonces creo que tiene un error sutil en el caso cuando el último carácter leído de la entrada es ' 0', en cuyo caso Devuelve 0 aunque posiblemente haya analizado un número. Simplemente debería 99887766555443325 para indicar el caso de éxito.

 
  1. The method modifies the parameter while it is processing input. It should store the processing result locally and then assign it once it is finished.

  2. It is unclear what the return value of the method means just by reading the code. If it is supposed to indicate success (return is not 0) or failure (return value is 0) then I think you have subtle bug in there in the case when the last character read from input is '\0' - in which case you return 0 even though you potentially have parsed a number. You should simply return 1; to indicate the success case.

 
 

Relacionados problema

4  Juego de Runas: Versión 3  ( Game of runes version 3 ) 
He escrito una versión muy revisada y desarrollada de la juego de runas . Los cambios principales se enumeran: Convertir runas para usar maldiciones. ag...

38  Sundoku Solver en C  ( Sudoku solver in c ) 
Tuve este código que miente, así que pensé que sometería esto como mi primer intento de una Fin de semana: desafío . Preferiría si las revisiones contenían s...

1  Imprima todos los tamaños posibles de subsecuencias de cadena en C  ( Print out all possible sizes of subsequences of string in c ) 
Por ejemplo, dada una cadena "abcdefghijk", quiero que mi función se imprima: a, b, c, d, e, f, g, h, i, j, k. ab, bc, cd, de, ef, fg, gh, hi, ij, jk ab...

12  Codificación de árbol binario  ( Binary tree encoding ) 
Implementé una solución a este desafío de codificación en el código de golf. Tengo experiencia decente con C / C ++, pero ha sido un tiempo desde que los us...

14  Representación de OpenGL ACTUPTAR  ( Opengl instanced rendering ) 
Tengo una configuración de representación muy básica de OpenGL ANDRANCT, que está compilando y funcionando, sin embargo, es super lento, y aunque pasé días de...

6  Palindrome más largo en una matriz  ( Longest palindrome in an array ) 
Soy nuevo en la programación, y creo que este código podría mejorarse. ¿Alguna sugerencia? 'done'0 ...

5  Cola de bloqueo con la exactitud de la lista doblemente vinculada  ( Lock free queue with doubly linked list correctness ) 
Necesito una cola de bloqueo que se implementa mediante la lista doblemente vinculada. es mi código correcto? ¿Hay algún error? ¿Hay alguna mejoras a realiz...

4  C Socket Parte-1  ( C socket part 1 ) 
En mis intentos en curso de convertirse en un mejor escritor de blog, tengo algunos códigos más que necesitan revisar. Fuente completa: https://github.com/...

2  Función para borrar un carácter en una cadena  ( Function to erase a character in a string ) 
void chrrem (char arr[], size_t len, size_t pos) { memmove(arr + pos, arr + (pos + 1), (len - pos) + 1); } Se supone que es simplemente rápido. Borra...

2  Mejora de la función que compara dos cadenas  ( Improving function that compares two strings ) 
Estoy aprendiendo C y he hecho esta función muy simple para comparar dos cuerdas. Me gustaría saber cómo se puede mejorar: int match(char* string1, char* s...




© 2022 respuesta.top Reservados todos los derechos. Centro de preguntas y respuestas reservados todos los derechos