Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

182
Views
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 answers
Answer question

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 Report

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!