格式说明符 %s 未显示结果
Format specifier %s in not showing result
我正在学习 C 编程语言。我正在用 C 编程语言做作业。但是我遇到了问题。结果打印不出来。我正在使用格式说明符 %s。下面是我的代码。请看一下。
#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;
}
如何解决我的问题?我应该使用什么说明符来获得预期结果?
对于像这样的初学者案例标签
case 90 ... 100:
不是标准的 C 功能。最好使用 if-else 语句。此外,函数参数应具有无符号整数类型,例如 unsigned int
.
你的函数return是一个int
类型的对象
int gradeCalculation(int marks) {
因此,将转换说明符 %s
与类型 int
的对象一起使用会导致未定义的行为。
函数return类型应该是const char *
const char * gradeCalculation( unsigned int marks ) {
而不是整数字符文字,您需要 return 字符串文字,例如
case 80 ... 89:
return "A";
break;
case 90 ... 100:
return "A+";
break;
default:
return "Marks is not valid!";
您的程序可以如下所示
#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;
}
.
撇号表示字符常量; F
是一个整数,是字符“F”的代码。
出于各种 legacy/history 原因,您可以使用多字符常量,例如 A+
,它的值可以组合两个字符“A”和“+”的值。但是,结果仍然是int
;它通常不被视为两个字符的字符串。多字符常量用于特殊目的并且依赖于实现。除了特殊情况,你应该避免使用它们。
在gradeCalculation
中,你要return一串字符。为了引用一个字符串,我们通常使用指向它的第一个元素的指针。所以把return类型设为gradeCalculation
const char *
。然后把所有的字符常量都改成字符串字面量,比如"F"
、"A+"
、"Marks is not valid"
。注意使用引号而不是撇号。字符串文字表示一个字符数组,包括一个空字符来标记结束。
您给出的代码中有几点需要注意:
在行 printf("Grade: %s\n", gradeCalculation(marks));
中,函数 gradeCalculation()
returns 是 int
而格式说明符是 %s
这是对于字符串(char *).
在int gradeCalculation(int marks)
中,所有情况都是returning一个字符,除了
case 90 ... 100:
return 'A+';
break;
default:
return 'Marks is not valid!';
这是 returning 字符串。
所以把return类型全部转成string就好了,改成char *
即string.
下面是解决方案:-
#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;
}
我正在学习 C 编程语言。我正在用 C 编程语言做作业。但是我遇到了问题。结果打印不出来。我正在使用格式说明符 %s。下面是我的代码。请看一下。
#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;
}
如何解决我的问题?我应该使用什么说明符来获得预期结果?
对于像这样的初学者案例标签
case 90 ... 100:
不是标准的 C 功能。最好使用 if-else 语句。此外,函数参数应具有无符号整数类型,例如 unsigned int
.
你的函数return是一个int
int gradeCalculation(int marks) {
因此,将转换说明符 %s
与类型 int
的对象一起使用会导致未定义的行为。
函数return类型应该是const char *
const char * gradeCalculation( unsigned int marks ) {
而不是整数字符文字,您需要 return 字符串文字,例如
case 80 ... 89:
return "A";
break;
case 90 ... 100:
return "A+";
break;
default:
return "Marks is not valid!";
您的程序可以如下所示
#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;
}
.
撇号表示字符常量; F
是一个整数,是字符“F”的代码。
出于各种 legacy/history 原因,您可以使用多字符常量,例如 A+
,它的值可以组合两个字符“A”和“+”的值。但是,结果仍然是int
;它通常不被视为两个字符的字符串。多字符常量用于特殊目的并且依赖于实现。除了特殊情况,你应该避免使用它们。
在gradeCalculation
中,你要return一串字符。为了引用一个字符串,我们通常使用指向它的第一个元素的指针。所以把return类型设为gradeCalculation
const char *
。然后把所有的字符常量都改成字符串字面量,比如"F"
、"A+"
、"Marks is not valid"
。注意使用引号而不是撇号。字符串文字表示一个字符数组,包括一个空字符来标记结束。
您给出的代码中有几点需要注意:
在行
printf("Grade: %s\n", gradeCalculation(marks));
中,函数gradeCalculation()
returns 是int
而格式说明符是%s
这是对于字符串(char *).在
int gradeCalculation(int marks)
中,所有情况都是returning一个字符,除了case 90 ... 100:
return 'A+';
break;
default:
return 'Marks is not valid!';
这是 returning 字符串。
所以把return类型全部转成string就好了,改成char *
即string.
下面是解决方案:-
#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;
}