C++ forbids comparison between pointer and integer [-fpermissive] en un simple contador
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
añade un comentario |
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
añade un comentario |
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
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
c
editada el 12 mar. a las 6:13
Trauma
15.3k31846
15.3k31846
formulada el 12 mar. a las 5:31
x4squaredx4squared
111
111
añade un comentario |
añade un comentario |
2 respuestas
2
activas
más antiguas
votos
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++;
añade un comentario |
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] != ' '
añade un comentario |
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
});
}
});
Registrarse o iniciar sesión
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Registrarse mediante Google
Registrarse mediante Facebook
Regístrate con email y contraseña
Publicar como invitado
Requerido, nunca se muestra
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
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++;
añade un comentario |
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++;
añade un comentario |
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++;
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++;
respondida el 12 mar. a las 6:28
TraumaTrauma
15.3k31846
15.3k31846
añade un comentario |
añade un comentario |
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] != ' '
añade un comentario |
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] != ' '
añade un comentario |
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] != ' '
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] != ' '
respondida el 12 mar. a las 7:25
PaperBirdMasterPaperBirdMaster
23k32356
23k32356
añade un comentario |
añade un comentario |
¡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.
Registrarse o iniciar sesión
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Registrarse mediante Google
Registrarse mediante Facebook
Regístrate con email y contraseña
Publicar como invitado
Requerido, nunca se muestra
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
Registrarse o iniciar sesión
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Registrarse mediante Google
Registrarse mediante Facebook
Regístrate con email y contraseña
Publicar como invitado
Requerido, nunca se muestra
Registrarse o iniciar sesión
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Registrarse mediante Google
Registrarse mediante Facebook
Regístrate con email y contraseña
Publicar como invitado
Requerido, nunca se muestra
Registrarse o iniciar sesión
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Registrarse mediante Google
Registrarse mediante Facebook
Regístrate con email y contraseña
Registrarse mediante Google
Registrarse mediante Facebook
Regístrate con email y contraseña
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