gpt4 book ai didi

c - C语言中的异常

转载 作者:行者123 更新时间:2023-11-30 18:40:35 25 4
gpt4 key购买 nike

我正在学习c语言,我遇到了困难,如果你愿意帮助我,我很感激(这里是例子:“编写一个程序,从标准输入读取字符到文件末尾。对于每个字符,让程序报告它是否是一个字母。如果它是一个字母,还报告它在字母表中的数字位置,否则为 -1。” 顺便说一句,这不是作业)。问题在于\n 我不知道如何使其成为异常(exception)。我是新来的,如果我遗漏了什么,请告诉我。感谢您的帮助。

int main(void)
{
char ch;
int order;

printf("Enter letters and it will tell you the location in the alphabet.\n");
while ((ch = getchar()) != EOF)
{
printf("%c", ch);
if (ch >= 'A' && ch <= 'Z')
{
order = ch - 'A' + 1;
printf(" %d \n", order);
}
if (ch >= 'a' && ch <= 'z')
{
order = ch - 'a' + 1;
printf(" %d \n", order);
}
if (order != (ch >= 'A' && ch <= 'Z') || (ch >= 'a' && ch <= 'z'))
{
if (ch == '\n');
else if (order != (ch >= 'A' && ch <= 'Z') || (ch >= 'a' && ch <= 'z'))
printf(" -1 \n");
}
}

system("pause");
}

最佳答案

您正在谈论一个“异常”,它可以在编程中以其他方式解释。
我知道你想要那个 '\n'在非字母字符集中被“排除”,也就是说,它不会生成错误值 -1

由于您使用控制台来运行程序,因此将读取字符序列,直到按下ENTER键,这会生成字符\n 。所以,我不太确定while()您使用的条件,与 EOF 进行比较,这是你的一个很好的决定。

  • 我会直接将与 '\n' 的比较放在那里。

    while ((ch = getchar()) != '\n')

  • 通知 ch无论是否是字母,我们都可以使用字符串文字。以下字符串赋值的使用值得更多解释,但我将省略它。它对于字符串文字有效:

    char *info;
    if (order != -1)
    info = "is a letter";
    else
    info = "is not a letter";

  • 您假设编码中字母按连续递增顺序排列(如ASCII)。

  • 通过假设,使用大写或小写字母就足够了,因为您只对字母在字母表中占据的位置感兴趣。因此,您可以选择使用大写,例如,这样:

    if (ch >= 'a' && ch <= 'z')
    ch = (ch - 'a' + 'A');

    这行代码的作用是ch仅当 ch 时才转换为大写是一个小写字母。另一种性格则不受影响。

    因此,从现在开始,您只能使用大写字母或非字母字符。

  • 那么剩下的部分就很容易编码了:

    if (ch >= 'A' && ch <= 'Z')
    order = ch - 'A' + 1; // It brings no. position of letter in alphabet
    else
    order = -1; // This is the erroneous case

  • A printf()循环结束时可以带来有关角色的所有信息:

    printf(" %16s: %4d \n", info, order);

生成的代码更短,更清晰:

 #include <stdio.h>
int main(void) {
char ch;
int order;
char *info;

while ((ch = getchar()) != '\n') {
printf("%c",ch);

if (ch >= 'a' && ch <= 'z') /* Converting all to uppercase */
ch = (ch - 'a' + 'A');
if (ch >= 'A' && ch <= 'Z')
order = ch - 'A' + 1; /* Position of letter in alphabet */
else
order = -1; /* Not in alphabet */

if (order != -1)
info = "is a letter";
else
info = "is not a letter";

printf(" %16s: %4d \n", info, order);
}
}

如果您需要通过与 EOF 进行比较来结束输入,那么 ch 的类型必须更改为 int而不是char ,因此您可以确定 EOF值(即 int )正确保存在 ch 中.
最后,这意味着ch现在需要初始化,例如程序中的中性值,如 '\n'

<小时/>

最后,为了好玩,我添加了我的超短版本:

 #include <stdio.h>
int main(void) {
int ch, order;
while ((ch = getchar()) != '\n') {
order = (ch>='a' && ch<='z')? ch-'a'+1:((ch>='A' && ch<='Z')? ch-'A'+1: -1);
printf("%c %8s a letter: %4d \n", ch, (order != -1)? "is":"is not", order);
}
}

关于c - C语言中的异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25687694/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com