Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

180
Visualizações
El especificador de formato %s no muestra el resultado

Estoy aprendiendo el lenguaje de programación C. Estoy haciendo la tarea con el lenguaje de programación C. Pero estoy teniendo un problema. El resultado no es imprimir. Estoy usando el especificador de formato %s. Aquí está mi código a continuación. Por favor échale un vistazo.

 #include <stdio.h> int gradeCalculation(int marks) { switch (marks) { case 0 ... 49: return 'F'; break; case 50 ... 59: return 'D'; break; case 60 ... 69: return 'C'; break; case 70 ... 79: return 'B'; break; case 80 ... 89: return 'A'; break; case 90 ... 100: return 'A+'; break; default: return 'Marks is not valid!'; } } int main() { int marks; printf("Marks: "); scanf("%d", &marks); printf("Grade: %s\n", gradeCalculation(marks)); return 0; }

¿Cómo solucionar mi problema? ¿Qué especificador debo usar para obtener el resultado esperado?

over 4 years ago · Santiago Trujillo
3 Respostas
Responde à pergunta

0

Para empezar etiquetas de casos como este

 case 90 ... 100:

no es una función estándar de C. Es mejor usar sentencias if-else. Además, el parámetro de función debe tener un tipo de entero sin signo, por ejemplo, unsigned int .

Su función devuelve un objeto del tipo int

 int gradeCalculation(int marks) {

Entonces, usar el especificador de conversión %s con un objeto del tipo int da como resultado un comportamiento indefinido.

El tipo de retorno de la función debe ser const char *

 const char * gradeCalculation( unsigned int marks ) {

y en lugar de literales de caracteres enteros, debe devolver literales de cadena como, por ejemplo

 case 80 ... 89: return "A"; break; case 90 ... 100: return "A+"; break; default: return "Marks is not valid!";

Su programa puede verse de la siguiente manera

 #include <stdio.h> const char * gradeCalculation( unsigned int marks ) { const char *grade = "Marks is not valid!"; if ( marks < 50 ) { grade = "F"; } else if ( marks < 60 ) { grade = "D"; } else if ( marks < 70 ) { grade = "C"; } else if ( marks < 80 ) { grade = "B"; } else if ( marks < 90 ) { grade = "A"; } else if ( marks <= 100 ) { grade = "A+"; } return grade; } int main( void ) { unsigned int marks = 0; printf("Marks: "); scanf( "%u", &marks ); printf( "Grade: %s\n", gradeCalculation( marks ) ); return 0; }

.

over 4 years ago · Santiago Trujillo Relatório

0

Los apóstrofes denotan constantes de caracteres; F es un número entero que es el código para el carácter "F".

Por varios motivos heredados/históricos, puede tener constantes de varios caracteres como A+ , que tiene un valor que puede combinar los valores de los dos caracteres "A" y "+". Sin embargo, el resultado sigue siendo un int ; generalmente no se trata como una cadena de dos caracteres. Las constantes de varios caracteres se utilizan para fines especiales y dependen de la implementación. Debe evitarlos fuera de circunstancias especiales.

En gradeCalculation , desea devolver una cadena de caracteres. Para referirnos a una cadena, generalmente usamos un puntero a su primer elemento. Así que haga el tipo de retorno de gradeCalculation const char * . Luego cambie todas las constantes de caracteres a literales de cadena, como "F" , "A+" y "Marks is not valid" . Tenga en cuenta el uso de comillas en lugar de apóstrofes. Un literal de cadena denota una matriz de caracteres, incluido un carácter nulo para marcar el final.

over 4 years ago · Santiago Trujillo Relatório

0

Hay algunos puntos a tener en cuenta en su código dado:

  1. En la línea printf("Grade: %s\n", gradeCalculation(marks)); , la función gradeCalculation() devuelve un int mientras que el especificador de formato es %s que es para una cadena (char *).

  2. En el int gradeCalculation(int marks) , todos los casos devuelven un carácter, excepto

    case 90 ... 100:

    return 'A+';

    break;

    default:

    return 'Marks is not valid!';

que están devolviendo la cadena.

Por lo tanto, será bueno convertir todo a cadena y cambiar el tipo de retorno a char * , es decir, cadena.

A continuación se muestra la solución: -

 #include <stdio.h> char * gradeCalculation(int marks) { switch (marks) { case 0 ... 49: return "F"; break; case 50 ... 59: return "D"; break; case 60 ... 69: return "C"; break; case 70 ... 79: return "B"; break; case 80 ... 89: return "A"; break; case 90 ... 100: return "A+"; break; default: return "Marks is not valid!"; } } int main() { int marks; printf("Marks: "); scanf("%d", &marks); printf("Grade: %s\n", gradeCalculation(marks)); return 0; }
over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda