C++ forbids comparison between pointer and integer [-fpermissive] en un simple contador












2















Se trata de un algoritmo que lea n frases, y despues cuente cuantas palabras hay en cada frase, pero a la hora que quiero hacer el conteo de espacios en la frase me da ese error del titulo.
El codigo es este:



#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define Max 5

int main()
{
char oracion[100];
char oraciones [Max][20];
int i,h,NdO,k,j,contPalabras=1;

printf("¿Cuantas oraciones desea ordenar? ");
scanf ("%d",&NdO);
fflush(stdin);
for(k=0;k<NdO;k++) //Contador oraciones
{
printf("Ingrese la oracion numero %dn", k+1 );
gets (oraciones [k]);
}


for(h=0;h<strlen(oraciones[h]);h++)
if (oraciones[h] == ' ' && h > 0 && oraciones[h - 1] != ' ')
contPalabras++;

}









compartir|mejorar esta pregunta





























    2















    Se trata de un algoritmo que lea n frases, y despues cuente cuantas palabras hay en cada frase, pero a la hora que quiero hacer el conteo de espacios en la frase me da ese error del titulo.
    El codigo es este:



    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #define Max 5

    int main()
    {
    char oracion[100];
    char oraciones [Max][20];
    int i,h,NdO,k,j,contPalabras=1;

    printf("¿Cuantas oraciones desea ordenar? ");
    scanf ("%d",&NdO);
    fflush(stdin);
    for(k=0;k<NdO;k++) //Contador oraciones
    {
    printf("Ingrese la oracion numero %dn", k+1 );
    gets (oraciones [k]);
    }


    for(h=0;h<strlen(oraciones[h]);h++)
    if (oraciones[h] == ' ' && h > 0 && oraciones[h - 1] != ' ')
    contPalabras++;

    }









    compartir|mejorar esta pregunta



























      2












      2








      2








      Se trata de un algoritmo que lea n frases, y despues cuente cuantas palabras hay en cada frase, pero a la hora que quiero hacer el conteo de espacios en la frase me da ese error del titulo.
      El codigo es este:



      #include <stdio.h>
      #include <stdlib.h>
      #include <string.h>
      #define Max 5

      int main()
      {
      char oracion[100];
      char oraciones [Max][20];
      int i,h,NdO,k,j,contPalabras=1;

      printf("¿Cuantas oraciones desea ordenar? ");
      scanf ("%d",&NdO);
      fflush(stdin);
      for(k=0;k<NdO;k++) //Contador oraciones
      {
      printf("Ingrese la oracion numero %dn", k+1 );
      gets (oraciones [k]);
      }


      for(h=0;h<strlen(oraciones[h]);h++)
      if (oraciones[h] == ' ' && h > 0 && oraciones[h - 1] != ' ')
      contPalabras++;

      }









      compartir|mejorar esta pregunta
















      Se trata de un algoritmo que lea n frases, y despues cuente cuantas palabras hay en cada frase, pero a la hora que quiero hacer el conteo de espacios en la frase me da ese error del titulo.
      El codigo es este:



      #include <stdio.h>
      #include <stdlib.h>
      #include <string.h>
      #define Max 5

      int main()
      {
      char oracion[100];
      char oraciones [Max][20];
      int i,h,NdO,k,j,contPalabras=1;

      printf("¿Cuantas oraciones desea ordenar? ");
      scanf ("%d",&NdO);
      fflush(stdin);
      for(k=0;k<NdO;k++) //Contador oraciones
      {
      printf("Ingrese la oracion numero %dn", k+1 );
      gets (oraciones [k]);
      }


      for(h=0;h<strlen(oraciones[h]);h++)
      if (oraciones[h] == ' ' && h > 0 && oraciones[h - 1] != ' ')
      contPalabras++;

      }






      c






      compartir|mejorar esta pregunta















      compartir|mejorar esta pregunta













      compartir|mejorar esta pregunta




      compartir|mejorar esta pregunta








      editada el 12 mar. a las 6:13









      Trauma

      15.3k31846




      15.3k31846










      formulada el 12 mar. a las 5:31









      x4squaredx4squared

      111




      111






















          2 respuestas
          2






          activas

          más antiguas

          votos


















          3














          No lo indicas, pero tu error se encuentra aquí:



            ...
          char oraciones[Max][20];
          ...
          if( oraciones[h] == ' ' && h > 0 && oraciones[h - 1] != ' ' ) // <- AQUÍ


          El error es muy sencillo: tu variable oraciones es una formación de formaciones de caracteres; es decir, oraciones[x] es una formación de caracteres.



          Y los tipos tipo[X] decaen, automáticamente, al tipo tipo *. Es decir, en realidad, eso es un puntero. Es como si hubieras declarado char *oraciones[20].



          Fíjate que digo es como si. En las formaciones, el compilador realmente si reserva el espacio indicado, pero el lenguaje C no puede tratar con espacios de memoria. Únicamente sabe tratar con punteros. Y eso es lo que el compilador hace: te hace el favor de devolverte un puntero que, valga la redundancia, apunta al espacio de memoria que ha sido reservada.



          Con esto en mente, tu error es fácil de entender: no puedes comparar un puntero con un número; porque, por otra parte, ' ' es un número: el código ASCII del caracter espacio.



          ¿ La solución ? Pues no mezclar peras con manzanas:



          for( int linea = 0; linea < Max; ++linea )
          for( size_t letra = 0; letra < strlen( oraciones[linea] ); ++letra )
          if( oraciones[linea][letra] == ' ' && letra > 0 && oraciones[linea][letra - 1] != ' ' )
          contPalabras++;





          compartir|mejorar esta respuesta































            2














            El error que recibes es claro, autoexplicativo y conciso:




            C++ forbids comparison between pointer and integer




            Tal vez no lo entiendes por estar en inglés, lo traduzco:




            C++ prohíbe la comparación entre puntero y entero




            Para empezar, sorprende que recibas un error etiquetado como C++ en un código claramente C y que has etiquetado como C en el sitio; revisa los parámetros de tu compilador.



            Para acabar, el error es sobre comparaciones, en tu código las únicas comparaciones explícitas están en esta instrucción:



            oraciones[h] == ' ' && h > 0 && oraciones[h - 1] != ' '


            El tipo de operaciones es char[5][20], una formación bidimensional de caracteres. Eliminando una dimensión (accediendo a una de las colecciones con el operador de indexado ) aún queda la otra; en otras palabras el tipo operaciones[índice] es char* (puntero a carácter) y lo estás comparando contra ' ' (espacio en blanco); el cuál se promociona a entero en la comparación dando lugar al error que encuentras.



            Por suerte, el problema es muy fácil de solucionar:



            *oraciones[h] == ' ' && h > 0 && *oraciones[h - 1] != ' '





            compartir|mejorar esta respuesta























              Tu Respuesta






              StackExchange.ifUsing("editor", function () {
              StackExchange.using("externalEditor", function () {
              StackExchange.using("snippets", function () {
              StackExchange.snippets.init();
              });
              });
              }, "code-snippets");

              StackExchange.ready(function() {
              var channelOptions = {
              tags: "".split(" "),
              id: "637"
              };
              initTagRenderer("".split(" "), "".split(" "), channelOptions);

              StackExchange.using("externalEditor", function() {
              // Have to fire editor after snippets, if snippets enabled
              if (StackExchange.settings.snippets.snippetsEnabled) {
              StackExchange.using("snippets", function() {
              createEditor();
              });
              }
              else {
              createEditor();
              }
              });

              function createEditor() {
              StackExchange.prepareEditor({
              heartbeatType: 'answer',
              autoActivateHeartbeat: false,
              convertImagesToLinks: false,
              noModals: true,
              showLowRepImageUploadWarning: true,
              reputationToPostImages: null,
              bindNavPrevention: true,
              postfix: "",
              imageUploader: {
              brandingHtml: "Impulsado por u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
              contentPolicyHtml: "Contribuciones del usuario con licencia u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 con atribuciu0026#243;n requeridau003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(polu0026#237;tica de contenido)u003c/au003e",
              allowUrls: true
              },
              onDemand: true,
              discardSelector: ".discard-answer"
              ,immediatelyShowMarkdownHelp:true
              });


              }
              });














              borrador guardado

              borrador descartado


















              StackExchange.ready(
              function () {
              StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fes.stackoverflow.com%2fquestions%2f244895%2fc-forbids-comparison-between-pointer-and-integer-fpermissive-en-un-simple-c%23new-answer', 'question_page');
              }
              );

              Publicar como invitado















              Requerido, nunca se muestra

























              2 respuestas
              2






              activas

              más antiguas

              votos








              2 respuestas
              2






              activas

              más antiguas

              votos









              activas

              más antiguas

              votos






              activas

              más antiguas

              votos









              3














              No lo indicas, pero tu error se encuentra aquí:



                ...
              char oraciones[Max][20];
              ...
              if( oraciones[h] == ' ' && h > 0 && oraciones[h - 1] != ' ' ) // <- AQUÍ


              El error es muy sencillo: tu variable oraciones es una formación de formaciones de caracteres; es decir, oraciones[x] es una formación de caracteres.



              Y los tipos tipo[X] decaen, automáticamente, al tipo tipo *. Es decir, en realidad, eso es un puntero. Es como si hubieras declarado char *oraciones[20].



              Fíjate que digo es como si. En las formaciones, el compilador realmente si reserva el espacio indicado, pero el lenguaje C no puede tratar con espacios de memoria. Únicamente sabe tratar con punteros. Y eso es lo que el compilador hace: te hace el favor de devolverte un puntero que, valga la redundancia, apunta al espacio de memoria que ha sido reservada.



              Con esto en mente, tu error es fácil de entender: no puedes comparar un puntero con un número; porque, por otra parte, ' ' es un número: el código ASCII del caracter espacio.



              ¿ La solución ? Pues no mezclar peras con manzanas:



              for( int linea = 0; linea < Max; ++linea )
              for( size_t letra = 0; letra < strlen( oraciones[linea] ); ++letra )
              if( oraciones[linea][letra] == ' ' && letra > 0 && oraciones[linea][letra - 1] != ' ' )
              contPalabras++;





              compartir|mejorar esta respuesta




























                3














                No lo indicas, pero tu error se encuentra aquí:



                  ...
                char oraciones[Max][20];
                ...
                if( oraciones[h] == ' ' && h > 0 && oraciones[h - 1] != ' ' ) // <- AQUÍ


                El error es muy sencillo: tu variable oraciones es una formación de formaciones de caracteres; es decir, oraciones[x] es una formación de caracteres.



                Y los tipos tipo[X] decaen, automáticamente, al tipo tipo *. Es decir, en realidad, eso es un puntero. Es como si hubieras declarado char *oraciones[20].



                Fíjate que digo es como si. En las formaciones, el compilador realmente si reserva el espacio indicado, pero el lenguaje C no puede tratar con espacios de memoria. Únicamente sabe tratar con punteros. Y eso es lo que el compilador hace: te hace el favor de devolverte un puntero que, valga la redundancia, apunta al espacio de memoria que ha sido reservada.



                Con esto en mente, tu error es fácil de entender: no puedes comparar un puntero con un número; porque, por otra parte, ' ' es un número: el código ASCII del caracter espacio.



                ¿ La solución ? Pues no mezclar peras con manzanas:



                for( int linea = 0; linea < Max; ++linea )
                for( size_t letra = 0; letra < strlen( oraciones[linea] ); ++letra )
                if( oraciones[linea][letra] == ' ' && letra > 0 && oraciones[linea][letra - 1] != ' ' )
                contPalabras++;





                compartir|mejorar esta respuesta


























                  3












                  3








                  3







                  No lo indicas, pero tu error se encuentra aquí:



                    ...
                  char oraciones[Max][20];
                  ...
                  if( oraciones[h] == ' ' && h > 0 && oraciones[h - 1] != ' ' ) // <- AQUÍ


                  El error es muy sencillo: tu variable oraciones es una formación de formaciones de caracteres; es decir, oraciones[x] es una formación de caracteres.



                  Y los tipos tipo[X] decaen, automáticamente, al tipo tipo *. Es decir, en realidad, eso es un puntero. Es como si hubieras declarado char *oraciones[20].



                  Fíjate que digo es como si. En las formaciones, el compilador realmente si reserva el espacio indicado, pero el lenguaje C no puede tratar con espacios de memoria. Únicamente sabe tratar con punteros. Y eso es lo que el compilador hace: te hace el favor de devolverte un puntero que, valga la redundancia, apunta al espacio de memoria que ha sido reservada.



                  Con esto en mente, tu error es fácil de entender: no puedes comparar un puntero con un número; porque, por otra parte, ' ' es un número: el código ASCII del caracter espacio.



                  ¿ La solución ? Pues no mezclar peras con manzanas:



                  for( int linea = 0; linea < Max; ++linea )
                  for( size_t letra = 0; letra < strlen( oraciones[linea] ); ++letra )
                  if( oraciones[linea][letra] == ' ' && letra > 0 && oraciones[linea][letra - 1] != ' ' )
                  contPalabras++;





                  compartir|mejorar esta respuesta













                  No lo indicas, pero tu error se encuentra aquí:



                    ...
                  char oraciones[Max][20];
                  ...
                  if( oraciones[h] == ' ' && h > 0 && oraciones[h - 1] != ' ' ) // <- AQUÍ


                  El error es muy sencillo: tu variable oraciones es una formación de formaciones de caracteres; es decir, oraciones[x] es una formación de caracteres.



                  Y los tipos tipo[X] decaen, automáticamente, al tipo tipo *. Es decir, en realidad, eso es un puntero. Es como si hubieras declarado char *oraciones[20].



                  Fíjate que digo es como si. En las formaciones, el compilador realmente si reserva el espacio indicado, pero el lenguaje C no puede tratar con espacios de memoria. Únicamente sabe tratar con punteros. Y eso es lo que el compilador hace: te hace el favor de devolverte un puntero que, valga la redundancia, apunta al espacio de memoria que ha sido reservada.



                  Con esto en mente, tu error es fácil de entender: no puedes comparar un puntero con un número; porque, por otra parte, ' ' es un número: el código ASCII del caracter espacio.



                  ¿ La solución ? Pues no mezclar peras con manzanas:



                  for( int linea = 0; linea < Max; ++linea )
                  for( size_t letra = 0; letra < strlen( oraciones[linea] ); ++letra )
                  if( oraciones[linea][letra] == ' ' && letra > 0 && oraciones[linea][letra - 1] != ' ' )
                  contPalabras++;






                  compartir|mejorar esta respuesta












                  compartir|mejorar esta respuesta



                  compartir|mejorar esta respuesta










                  respondida el 12 mar. a las 6:28









                  TraumaTrauma

                  15.3k31846




                  15.3k31846

























                      2














                      El error que recibes es claro, autoexplicativo y conciso:




                      C++ forbids comparison between pointer and integer




                      Tal vez no lo entiendes por estar en inglés, lo traduzco:




                      C++ prohíbe la comparación entre puntero y entero




                      Para empezar, sorprende que recibas un error etiquetado como C++ en un código claramente C y que has etiquetado como C en el sitio; revisa los parámetros de tu compilador.



                      Para acabar, el error es sobre comparaciones, en tu código las únicas comparaciones explícitas están en esta instrucción:



                      oraciones[h] == ' ' && h > 0 && oraciones[h - 1] != ' '


                      El tipo de operaciones es char[5][20], una formación bidimensional de caracteres. Eliminando una dimensión (accediendo a una de las colecciones con el operador de indexado ) aún queda la otra; en otras palabras el tipo operaciones[índice] es char* (puntero a carácter) y lo estás comparando contra ' ' (espacio en blanco); el cuál se promociona a entero en la comparación dando lugar al error que encuentras.



                      Por suerte, el problema es muy fácil de solucionar:



                      *oraciones[h] == ' ' && h > 0 && *oraciones[h - 1] != ' '





                      compartir|mejorar esta respuesta




























                        2














                        El error que recibes es claro, autoexplicativo y conciso:




                        C++ forbids comparison between pointer and integer




                        Tal vez no lo entiendes por estar en inglés, lo traduzco:




                        C++ prohíbe la comparación entre puntero y entero




                        Para empezar, sorprende que recibas un error etiquetado como C++ en un código claramente C y que has etiquetado como C en el sitio; revisa los parámetros de tu compilador.



                        Para acabar, el error es sobre comparaciones, en tu código las únicas comparaciones explícitas están en esta instrucción:



                        oraciones[h] == ' ' && h > 0 && oraciones[h - 1] != ' '


                        El tipo de operaciones es char[5][20], una formación bidimensional de caracteres. Eliminando una dimensión (accediendo a una de las colecciones con el operador de indexado ) aún queda la otra; en otras palabras el tipo operaciones[índice] es char* (puntero a carácter) y lo estás comparando contra ' ' (espacio en blanco); el cuál se promociona a entero en la comparación dando lugar al error que encuentras.



                        Por suerte, el problema es muy fácil de solucionar:



                        *oraciones[h] == ' ' && h > 0 && *oraciones[h - 1] != ' '





                        compartir|mejorar esta respuesta


























                          2












                          2








                          2







                          El error que recibes es claro, autoexplicativo y conciso:




                          C++ forbids comparison between pointer and integer




                          Tal vez no lo entiendes por estar en inglés, lo traduzco:




                          C++ prohíbe la comparación entre puntero y entero




                          Para empezar, sorprende que recibas un error etiquetado como C++ en un código claramente C y que has etiquetado como C en el sitio; revisa los parámetros de tu compilador.



                          Para acabar, el error es sobre comparaciones, en tu código las únicas comparaciones explícitas están en esta instrucción:



                          oraciones[h] == ' ' && h > 0 && oraciones[h - 1] != ' '


                          El tipo de operaciones es char[5][20], una formación bidimensional de caracteres. Eliminando una dimensión (accediendo a una de las colecciones con el operador de indexado ) aún queda la otra; en otras palabras el tipo operaciones[índice] es char* (puntero a carácter) y lo estás comparando contra ' ' (espacio en blanco); el cuál se promociona a entero en la comparación dando lugar al error que encuentras.



                          Por suerte, el problema es muy fácil de solucionar:



                          *oraciones[h] == ' ' && h > 0 && *oraciones[h - 1] != ' '





                          compartir|mejorar esta respuesta













                          El error que recibes es claro, autoexplicativo y conciso:




                          C++ forbids comparison between pointer and integer




                          Tal vez no lo entiendes por estar en inglés, lo traduzco:




                          C++ prohíbe la comparación entre puntero y entero




                          Para empezar, sorprende que recibas un error etiquetado como C++ en un código claramente C y que has etiquetado como C en el sitio; revisa los parámetros de tu compilador.



                          Para acabar, el error es sobre comparaciones, en tu código las únicas comparaciones explícitas están en esta instrucción:



                          oraciones[h] == ' ' && h > 0 && oraciones[h - 1] != ' '


                          El tipo de operaciones es char[5][20], una formación bidimensional de caracteres. Eliminando una dimensión (accediendo a una de las colecciones con el operador de indexado ) aún queda la otra; en otras palabras el tipo operaciones[índice] es char* (puntero a carácter) y lo estás comparando contra ' ' (espacio en blanco); el cuál se promociona a entero en la comparación dando lugar al error que encuentras.



                          Por suerte, el problema es muy fácil de solucionar:



                          *oraciones[h] == ' ' && h > 0 && *oraciones[h - 1] != ' '






                          compartir|mejorar esta respuesta












                          compartir|mejorar esta respuesta



                          compartir|mejorar esta respuesta










                          respondida el 12 mar. a las 7:25









                          PaperBirdMasterPaperBirdMaster

                          23k32356




                          23k32356






























                              borrador guardado

                              borrador descartado




















































                              ¡Gracias por contribuir en StackOverflow en español con una respuesta!


                              • Por favor, asegúrate de responder a la pregunta. ¡Proporciona información y comparte tu investigación!

                              Pero evita



                              • Pedir ayuda o aclaraciones, o responder a otras respuestas.

                              • Hacer declaraciones basadas en opiniones; asegúrate de respaldarlas con referencias o con tu propia experiencia personal.


                              Para obtener más información, consulta nuestros consejos sobre cómo escribir grandes respuestas.




                              borrador guardado


                              borrador descartado














                              StackExchange.ready(
                              function () {
                              StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fes.stackoverflow.com%2fquestions%2f244895%2fc-forbids-comparison-between-pointer-and-integer-fpermissive-en-un-simple-c%23new-answer', 'question_page');
                              }
                              );

                              Publicar como invitado















                              Requerido, nunca se muestra





















































                              Requerido, nunca se muestra














                              Requerido, nunca se muestra












                              Requerido, nunca se muestra







                              Requerido, nunca se muestra

































                              Requerido, nunca se muestra














                              Requerido, nunca se muestra












                              Requerido, nunca se muestra







                              Requerido, nunca se muestra







                              Popular posts from this blog

                              Biblatex bibliography style without URLs when DOI exists (in Overleaf with Zotero bibliography)

                              ComboBox Display Member on multiple fields

                              Is it possible to collect Nectar points via Trainline?