将整数和字符转换为C中的几种形式

时间:2014-10-26 05:01:27

标签: c integer

在我的课程中,我必须:

  1. 向用户询问一个数字,然后显示该数字,然后将其显示为小数,无符号八进制,十六进制,浮点,浮点数到两位小数,然后浮点到三位小数,浮点数带有签名的e和E表示法,以及一个字符串。
  2. 对角色也一样。
  3. 我刚刚被介绍过字符串,所以我不会在这里问这个问题。只要告诉我Opera的名字我可能会丢失什么?

    由于我修改了代码,当我用字符定义代码时,我能够获得除'%e'和'%o'之外的所有内容的结果。

    这是我的原始代码:

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    int usernumber;
    
    int main(void)
    {
        int usernumber;
        puts("Please input a number of your choice:");
        scanf("%d", &usernumber);
        printf("%d %i %f %.2f %.3f %e %E", &usernumber);
    
        return 0;
    }
    

    这是我的新代码(在2014-10-28修订):

    int  usernumber ;
    char usercharacter;
    
    int main(void) 
    {
       int (usernumber);
       int h1 = usernumber;
       int o1 = usernumber;
       int E1 = usernumber;
       int e1 = usernumber;
       char c1 = usernumber;
    {
        puts("\n\n------------>Please input a number of your choice:");
        scanf( "%d",&usernumber);
        printf("%d %i %f %.2f %.3f ", usernumber, usernumber, (float) usernumber, (float) usernumber, (float) usernumber);
        printf(" %c"), c1;
        printf(" %X ", h1);
        printf(" %o ", o1);
        printf(" %E ", E1);
        printf(" %e \n ", e1);
    
    }
       char (usercharacter);
       int h2 = usercharacter;
       int o2 = usercharacter;
       int E2 = usercharacter;
       int e2 = usercharacter;
       char c2 = usercharacter;
    {
        puts("\n------------>Please input a character of your choice:");
        scanf( " %c",&usercharacter);
        printf("%d %i %f %.2f %.3f", usercharacter, usercharacter, (float) usercharacter, (float) usercharacter, (float) usercharacter);
        printf(" %c"), c2;
        printf(" %X ", h2);
        printf(" %o ", o2);
        printf(" %E ", E2);
        printf(" %e \n ", e2);
    
    }
    
    }
    

    (14年10月30日)

    我再次更新了我的代码,以全新的格式创建它。现在我遇到了第一个携带第一个浮子的功能。作业已经很晚了,无论如何我都会为此删除分数,但是我仍然是出于好奇而仔细阅读解决方案。如果有人对于为什么会这样做有任何建议或解释,请随时发表评论!

    #include <stdio.h>
    #include <stdlib.h>
    
    
    
    int main(void)
    {
    char user_input[4200];       // The character string used to pull my integers from.
        {
        int input2integer;
        float input2float;
        puts("\n*----> Please input a number of your choice:  <----*");
        system("COLOR 2");
        scanf("%s", user_input);
        input2integer = atoi(user_input);  // Used to translate the character input into an integer.
        input2float = atof(user_input);    //Used to translate the character input into a float.
        printf("Your input was %s\nWhich could be interpreted in the following ways:\n", user_input);
        printf("int = %i\n", input2integer);
        printf("dec = %d\n", input2integer);
        printf("oct = %o\n", input2integer);
        printf("hex = %X\n", input2integer);
        printf("float = %f\n", input2float);
        printf("two digit float = %.2f\n", input2float);
        printf("three digit float = %.3f\n", input2float);
        printf("e float = %e\n", input2float);
        printf("E float = %E\n", input2float);
        printf("char = %c\n", input2integer);
        printf("string = %s\n", user_input);
        }
    
           char user_input_2[4200];
           {
           int input2integer_2;
           float input2float_2;
           puts("\n*----> Please input a character of your choice: <----*");
           system("COLOR 2");
           scanf("%s", user_input_2);//scans for a string and throws the value into the input array
           input2integer_2 = atoi(user_input_2);//converts the input array into an integer
           input2float_2 = atof(user_input_2);//converts the input array into a float
           printf("The Character selected was was %s\nThe Following are equivalent:\n", user_input_2);
           printf("int = %i\n", user_input_2);
           printf("dec = %d\n", user_input_2);
           printf("oct = %o\n", user_input_2);
           printf("hex = %X\n", user_input_2);
           printf("float = %f\n", input2integer_2);                 // Unfortunately, despite taking extra time on this,
           printf("two digit float = %.2f\n", input2integer_2);       // I failed to prevent this function from carrying the float from the one before.
           printf("three digit float = %.3f\n", input2integer_2);
           printf("e float = %e\n", input2integer_2);
           printf("E float = %E\n", input2integer_2);
           printf("char = %c\n", user_input_2);
           printf("string = %s\n", user_input_2);
           }
    return (0);
    

    (11.1.14)

    这是该计划的最终完整版本!

    int main(void)
    {
    char user_input[4200];       // The character string used to pull my integers from.
        {
        int input2integer;
        float input2float;
        puts("\n*----> Please input a number of your choice:  <----*");
        system("COLOR 2");
        scanf("%s", user_input);
        input2integer = atoi(user_input);  // Used to translate the character input into an integer.
        input2float = atof(user_input);    //Used to translate the character input into a float.
        printf("Your input was %s\nWhich could be interpreted in the following ways:\n", user_input);
        printf("int = %i\n", input2integer);
        printf("dec = %d\n", input2integer);
        printf("oct = %o\n", input2integer);
        printf("hex = %X\n", input2integer);
        printf("float = %f\n", input2float);
        printf("two digit float = %.2f\n", input2float);
        printf("three digit float = %.3f\n", input2float);
        printf("e float = %e\n", input2float);
        printf("E float = %E\n", input2float);
        printf("char = %c\n", input2integer);
        printf("string = %s\n", user_input);
        }
    
           char user_input_2[4200];
           {
           int input2integer_2;
           double input2float_2;
    
           puts("\n*----> Please input a character of your choice: <----*");
           system("COLOR 2");
           scanf("%s", user_input_2);
           input2integer_2 = atoi(user_input_2);
           input2float_2 = atof(user_input_2);
           input2integer_2 = user_input_2[0]; // *THESE* two lines of code caused me more trouble than everything I have done in this class combined.
           input2float_2 = input2integer_2;   // After a few very sleepless nights, and a massive migraine from staring at screens, I figured them out.
           printf("The Character selected was was %s\nThe Following are equivalent:\n", user_input_2);
           printf("int = %i\n", input2integer_2);
           printf("dec = %d\n", input2integer_2);
           printf("oct = %o\n", input2integer_2);
           printf("hex = %X\n", input2integer_2);
           printf("float = %f\n", input2float_2);
           printf("two digit float = %.2f\n", input2float_2);
           printf("three digit float = %.3f\n", input2float_2);
           printf("e float = %e\n", input2float_2);
           printf("E float = %E\n", input2float_2);
           printf("char = %c\n", user_input_2[0]);
           printf("string = %s\n", user_input_2);
           }
    return (0);
    }
    

2 个答案:

答案 0 :(得分:7)

格式说明符只有在为每个说明符提供printf参数时才有意义。

如果printf字符串中有8个格式说明符,则需要在参数列表中出现8个usernumber。

printf("%d",    usernumber);
printf("%d %i", usernumber, usernumber);
...

此外,printf不使用其参数的地址,如scanf。它不必写入它们。所以删除我在上面针对printf显示的&

请记住,您正在暗示printf您传递的是哪种变量。因为printf()使用可变参数列表(无类型列表),如果你传递一些与格式说明符提示不兼容的东西(%f的int或错误大小的变量),输出可能是错误的。考虑转换参数,或转移到临时变量。 (关于转换,请记住它只产生转换值,它不会改变原始变量)

答案 1 :(得分:7)

如果您的编译器没有告诉您第三次尝试出错的地方,那么您需要为自己做一个更好的编译器。海湾合作委员会将以最小的挑衅告诉你有关众多错误的信息。这是一个简单的修正;你需要确保为每种格式获得正确的类型,如前所述。

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

int main(void)
{
    char user_input[4200];
    int input2integer;
    float input2float;
    puts("\n*----> Please input a number of your choice:  <----*");
    //system("COLOR 2");
    scanf("%s", user_input);
    input2integer = atoi(user_input);
    input2float = atof(user_input);
    printf("Your input was %s\nWhich could be interpreted in the following ways:\n", user_input);
    printf("int = %i\n", input2integer);
    printf("dec = %d\n", input2integer);
    printf("oct = %o\n", input2integer);
    printf("hex = %X\n", input2integer);
    printf("float = %f\n", input2float);
    printf("two digit float = %.2f\n", input2float);
    printf("three digit float = %.3f\n", input2float);
    printf("e float = %e\n", input2float);
    printf("E float = %E\n", input2float);
    printf("char = %c\n", input2integer);
    printf("string = %s\n", user_input);

    char user_input_2[4200];
    int input2integer_2;
    float input2float_2;
    puts("\n*----> Please input a character of your choice: <----*");
    //system("COLOR 2");
    scanf("%s", user_input_2);
    input2integer_2 = atoi(user_input_2);
    input2float_2 = atof(user_input_2);
    printf("The Character selected was was %s\nThe Following are equivalent:\n", user_input_2);
    printf("int = %i\n", input2integer_2);
    printf("dec = %d\n", input2integer_2);
    printf("oct = %o\n", input2integer_2);
    printf("hex = %X\n", input2integer_2);
    printf("float = %f\n", input2float_2);
    printf("two digit float = %.2f\n", input2float_2);
    printf("three digit float = %.3f\n", input2float_2);
    printf("e float = %e\n", input2float_2);
    printf("E float = %E\n", input2float_2);
    printf("char = %c\n", user_input_2[0]);
    printf("string = %s\n", user_input_2);

    return(0);
}

使用GCC编译(源文件xyz.c):

gcc -O3 -g -std=c11 -Wall -Wextra -Wmissing-prototypes -Wstrict-prototypes \
    -Wold-style-definition -Werror xyz.c -o xyz

示例运行(用户提供的数据为48和0):

*----> Please input a number of your choice:  <----*
48
Your input was 48
Which could be interpreted in the following ways:
int = 48
dec = 48
oct = 60
hex = 30
float = 48.000000
two digit float = 48.00
three digit float = 48.000
e float = 4.800000e+01
E float = 4.800000E+01
char = 0
string = 48

*----> Please input a character of your choice: <----*
0
The Character selected was was 0
The Following are equivalent:
int = 0
dec = 0
oct = 0
hex = 0
float = 0.000000
two digit float = 0.00
three digit float = 0.000
e float = 0.000000e+00
E float = 0.000000E+00
char = 0
string = 0

这是版本3代码的格式化版本与我发布的代码之间的统一差异。标有-的行是已删除的旧行;标记为+的行是插入的新行。

--- xyz-bust.c  2014-10-30 21:39:38.000000000 -0700
+++ xyz-fixed.c 2014-10-30 21:12:29.000000000 -0700
@@ -33,16 +33,16 @@
     input2integer_2 = atoi(user_input_2);
     input2float_2 = atof(user_input_2);
     printf("The Character selected was was %s\nThe Following are equivalent:\n", user_input_2);
-    printf("int = %i\n", user_input_2);
-    printf("dec = %d\n", user_input_2);
-    printf("oct = %o\n", user_input_2);
-    printf("hex = %X\n", user_input_2);
-    printf("float = %f\n", input2integer_2);
-    printf("two digit float = %.2f\n", input2integer_2);
-    printf("three digit float = %.3f\n", input2integer_2);
-    printf("e float = %e\n", input2integer_2);
-    printf("E float = %E\n", input2integer_2);
-    printf("char = %c\n", user_input_2);
+    printf("int = %i\n", input2integer_2);
+    printf("dec = %d\n", input2integer_2);
+    printf("oct = %o\n", input2integer_2);
+    printf("hex = %X\n", input2integer_2);
+    printf("float = %f\n", input2float_2);
+    printf("two digit float = %.2f\n", input2float_2);
+    printf("three digit float = %.3f\n", input2float_2);
+    printf("e float = %e\n", input2float_2);
+    printf("E float = %E\n", input2float_2);
+    printf("char = %c\n", user_input_2[0]);
     printf("string = %s\n", user_input_2);

     return(0);

你说:

  

在这个例子中,你没有得到浮动效果;但我不明白为什么。

我不确定你指的浮动效果。但是,您观察到我为每个浮点格式将参数更改为printf()

  

我正在使用的编译器是Codeblocks,因为它是我班级使用的。

Code::Blocks是一个IDE。它可以配置为使用不同的编译器。您还没有确定使用Code :: Blocks的编译器。但是,如果您找不到让编译器抱怨代码中的错误的方法,那么请自己编写一个更好的编译器(并将其与Code :: Blocks一起使用)。它可以使用的编译器之一是GCC;如果您当前使用的不是GCC,并且您无法说服它拒绝更新3中发布的代码,请安装和配置GCC - 除非有一些关于“您必须使用其他编译器”的愚蠢规则。但它支持的大多数编译器都可以做得很挑剔:

  

Multiple compiler support

     
      
  • GCC(MingW / GNU GCC)
  •   
  • MSVC ++
  •   
  •   
  • 数字火星
  •   
  • Borland C ++ 5.5
  •   
  • 打开Watcom
  •   

MSVC ++需要/W3或其左右才能启用严格的警告,IIRC。可能还有更微妙的方法来设置警告;因为它认为标准C功能不安全,所以往往会变得相当嘈杂。 GCC和clang都将采用我展示的选项。我希望数字火星可以与GCC和clang相媲美,但不同。我不知道Borland或Open Watcom编译器,但是他们可能会在启用严格警告的情况下扭曲编译。