想要使用 if 条件分配 char 值 - C 语言 [关闭]
Posted
技术标签:
【中文标题】想要使用 if 条件分配 char 值 - C 语言 [关闭]【英文标题】:Want to assign char value using if condition - C language [closed] 【发布时间】:2016-04-05 21:28:10 【问题描述】:我正在练习制作评分表,我想在其中使用if
条件在变量中分配科目成绩。
这里eper
是我要检查的主题百分比并将其相应地存储在变量中。
if(eper >=80)
geng = "A";
请不要将我与数组和循环混淆,因为我正处于学习阶段,我仍处于初学者水平,还没有学习过循环和数组。
【问题讨论】:
"A"
是一个字符串(一个字符指针); 'A'
是单个字符。 geng
的类型是什么?如果你有const char *geng;
,那么你写的很好。如果你有char geng;
,那么你需要单字符形式。如果你有其他东西,你需要展示你所拥有的东西——它可能是非正统的,但如果你使用'A'
,它可能会“正常工作”。
也就是说把geng = "A";
改成geng = 'A';
(假设你之前已经声明了char geng;
(最好初始化为char geng = 0;
))
请提供minimal reproducible example并学习How to Ask。
@Olaf 该页面应该提到问题以问号结尾......这里完全没有。
@JimBalter:应该在学校学到这一点。 (嗯....)
【参考方案1】:
正如您通过 cmets 看到的那样,带有双引号 (""
) 的赋值将 字符串值 分配给左侧的变量。要将单个字符分配给左侧的变量,您需要使用 单引号 来证明它是 character 而不是 string 赋值.
以下不带循环等的内容演示了一种可用于基于数值的字母等级分配的方法。下面的代码要求给出学生姓名,后跟一个数字等级(在0-100
之间),用于确定学生的字母等级:
#include <stdio.h>
#include <stdlib.h>
int main (int argc, char **argv)
if (argc != 3) /* validate sufficient number of arguments */
fprintf (stderr, "error: invalid input. usage: %s name grade\n",
argv[0]);
return 1;
char *student = argv[1]; /* declare/initialize variables */
int grade = atoi (argv[2]);
char ltrgrade = 0;
if (grade < 0 || 100 < grade) /* validate grade in range */
fprintf (stderr, "error: invalid grade input '%d'.\n", grade);
return 1;
/* classify the grade with a letter grade */
if (grade >= 90)
ltrgrade = 'A';
else if (grade >= 80)
ltrgrade = 'B';
else if (grade >= 70)
ltrgrade = 'C';
else if (grade >= 60)
ltrgrade = 'D';
else
ltrgrade = 'F';
/* print the results */
printf ("\n %-12s %3d (%c)\n\n", student, grade, ltrgrade);
return 0;
使用/输出
$ ./bin/stdgrade sally 82
sally 82 (B)
$ ./bin/stdgrade Jonathan 90
Jonathan 90 (A)
(见:乔纳森再次获得金星:)
如果您还有其他问题,请告诉我。
【讨论】:
我担心你展示的一些机器可能比 OP 准备的更复杂,而且你对stdgrade David 123456
没有做任何事情(它只能像乔纳森那样得到 A 级,尽管得分比乔纳森多得多)。我想知道stdgrade Aristotle 100 Einstein 100 Newton 99
会发生什么?
C 没有字符串,因此没有“字符串值”。赋值的右侧衰减为指向 字符串文字 的第一个元素(即const char []
)的指针。不管是不是初学者,我们都应该使用正确的术语。这样他应该能够自己进一步研究。
"C 没有字符串" -- 这是错误的。它没有字符串type
,但它确实有一个传统的字符串存储格式,以及遵循该格式的字符串常量和字符串函数。但它肯定没有“字符串赋值”,所以你是对的......那部分肯定是错误的。 “我们应该使用正确的术语”——是的,只是。 “const char []”——不;它们不是 C 中的 const
,只有 C++。
@Olaf,Jim,也许我只是太老太老了。当我说字符串时,我的意思是键入char *
或键入char[]
,最后加上'\0'
。对我的不清楚的任何困惑感到抱歉。
@JonathanLeffler - 你在说什么? ./bin/stdgrade david 123456
得到 error: invalid grade input '123456'.
和 ./bin/stdgrade Aristotle 100 Einstein 100 Newton 99
结果为 Aristotle 100 (A)
,Einstein 100
或 Newton 99
均未处理,因为它们从未打算在单个输入示例中处理。我错过了您评论的意图吗?【参考方案2】:
欢迎来到类型的概念。
存储在对象中或由函数返回的值的含义取决于用于访问它的表达式的类型。对于声明,
geng = "A";
有两种相关的类型。表达式geng
的类型和表达式"A"
的类型。两个表达式的类型必须按照标准指定的方式兼容,但在这种情况下,说它们必须是相同的类型就足够了。要查看所有规则,请查找 C11 标准的 §6.5.16.1 - 公平警告,很难阅读。
现在,让我们找出"A"
的类型。 "A"
是一个字符串字面量,它们的类型是char
的数组。在这里需要注意的是,'A'
(单引号)指定了一个字符常量,类型为int
,并且可能是您想要的。
所以我们手头有几个案例:
如果您希望 geng
是单个字符,则适当的类型是 int
或 char
。如果它的可能值仅来自字符常量,则可以安全地选择:char geng = 'A';
如果 geng
应该表示字符常量,但它的值是函数调用的结果,例如fgetc
, int
是合适的类型
如果您打算让geng
保存字符串,例如"A"
,为了在代码中进一步方便(例如与其他字符串连接等),您应该指定:const char geng[] = "A";
或者 const char *geng = "A";
,看你会怎么用,会不会修改等等。
【讨论】:
“它们的类型是 const char 数组”——不,不是 C 中的 const(仅在 C++ 中)。当然,写信给他们是未定义的行为。这种古怪的设计是历史遗留物。const char geng[] = "A"; or const char *geng = "A";
-- 这些是初始化,而不是赋值,所以我看不出它们在这里有什么帮助。 TMI 不能很好地服务于 OP。以上是关于想要使用 if 条件分配 char 值 - C 语言 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章
有没有一种更简单的方法来为给定 if 条件的变量分配值 - Python?
关于SQL多条件查询问题: 若其中一条件为空值如何设置忽略该条件而用其它条件组合查询??