【问题标题】:how to convert char to int in c?如何在c中将char转换为int?
【发布时间】:2017-11-21 16:03:18
【问题描述】:

我试图制作一个对于菜鸟来说太大的程序。它大约有 100 行(对于像我这样的新手来说,它很大)。但是每次我运行它的循环都没有结束。所以决定编译和检查代码的一小部分,我在第一部分得到宾果游戏。这是那部分

#include <stdio.h>
int main(){//B main
    int cha,z; 
    printf("enter the alphabte in capital until you want the alphabats :-  ");
    scanf("%c",&z);
    for(;z>=65;z--)
        for(cha=65;cha<=z;cha++)
        {  
            if(cha!=z)
                printf("%c ",cha);
            else
                printf("%c \n",cha);
        }
}//B main

.我已经修改了它,如果我输入 c 它应该给出这样的输出:-

A B C
A B
A

但循环并没有结束,我不断在终端上得到类似的东西

              ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~  � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �        

因此尝试这部分

 #include <stdio.h>
 int main(){
     int a;
     scanf("%d",&a);
     printf("%d",a);
 }

如果我输入 A,那么它应该给我 65 作为输出,因为 A 的 ASCII 值是 65,但它给我以下输出

32766

但我的这个程序给了我正确的 ASCII 值

  #include <stdio.h>
  #include <stdlib.h>

  int main(){
      int b,c;
      b=0;
      printf("\n these are ASCII values of all letters \n\n\n ");
      while(b<=255)
      {
           printf("%c %d \n",b,b);
           b=b+1;
      }
 }

如何将a A G j 等字符用作具有 ASCII 值的整数?

如何使用它们的 ASCII 值进行算术运算?

【问题讨论】:

  • 请尝试重新组织问题。甚至很难理解你在问什么。
  • %c 需要一个字符作为参数,而不是整数。
  • 总是检查scanf的返回值。
  • 对于您的第一个程序,使用 调试器 逐行执行代码,看看它做了什么。

标签: c variables char int


【解决方案1】:

在您的示例中,将其更改为使用 %c:

#include <stdio.h>
int main()
{
  char a;
  scanf("%c",&a);
  printf("%d",a);
}

输入“A”,它会按预期打印 65。

现在只需将其扩展为您的代码。哦,检查scanf 的返回值。我没有在这里,因为我想保持示例简单,但始终在实际代码中进行。

【讨论】:

  • 他的问题是:“我怎样才能使用像A G 这样的字符并将它们用作带有ASCII 值的整数?”。
  • 整数值将存储在a中。如果提供了“A”,a 的值将是 65,并且可以将其用作总和中的 int。
  • @AjayBrahmakshatriya 没有提升,因为printf 没有第二个参数的类型 不。请参阅6.5.2.2 函数调用 the C Standard 的:“函数原型声明器中的省略号符号导致参数类型转换在最后一个声明的参数之后停止。默认参数提升是在尾随参数上执行的。”
  • @AjayBrahmakshatriya 所以它得到了提升。问题出在哪里?
  • @AndrewHenle 你是对的。他们将被提拔。我将删除我的 cmets。
【解决方案2】:

首先,您的第二个代码应该是:

#include <stdio.h>

int main(){
       char a;
       scanf("%c", &a); // read in single character value
       printf("%d",a); 
 }

其他一些注意事项:

  • 您可以使用文字字符代替代码中的值:
    if (char == 'A'){ printf("char is 'A'");}
  • 您可以像正常值一样加减:
    printf("%d", 'C' - 'A'); 打印 2
  • 我刚刚运行了您的第一个代码 sn-p。对我来说效果很好。

这是输出:

$ ./a.exe
enter the alphabte in capital until you want the alphabats :-  C
A B C
A B
A

【讨论】:

  • 在您的原始代码中,您应该将 z 变量更改为 char 类型,它会起作用。
  • 我同意你的观点,最好的方法是显式转换为 int 类型。
  • 你是对的,它会得到提升。我将删除 cmets。
【解决方案3】:

提供您自己的一组有效字符。
使用strchr 查看输入是否在有效字符集中。如果没有,请重试输入是否正确。
一旦获得正确的输入,再次使用strchr 以确保递增和递减的值保持有效。

#include <stdio.h>
#include <string.h>

int main( void) {
    char valid[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    char z = valid[0];
    char cha = valid[0];
    char *ok = NULL;
    char *chaok = NULL;

    printf("enter the alphabte in capital until you want the alphabats :-  ");
    do {
        if ( 1 != scanf(" %c",&z)) {
            fprintf ( stderr, "problem with input\n");
            return 0;
        }
        ok = strchr ( valid, z);
        if ( !ok) {
            printf ( "enter an uppercase letter. try again\n");
        }
    } while ( !ok);

    while ( ( ok = strchr ( valid, z)) && ok >= valid) {
        cha = valid[0];
        while ( ( chaok = strchr ( valid, cha)) && chaok <= ok) {
            if( chaok != ok)
                printf("%c ",cha);
            else
                printf("%c \n",cha);
            cha = *(++chaok);
        }
        z = 0x1;
        if ( ok > valid) {
            z = *(ok - 1);
        }
    }
}

【讨论】:

    猜你喜欢
    • 2012-06-04
    • 2015-07-11
    • 1970-01-01
    • 2011-03-31
    • 2017-01-18
    • 2014-02-07
    • 2013-08-10
    • 2018-02-10
    相关资源
    最近更新 更多