在我的课程中,我必须:
我刚刚被介绍过字符串,所以我不会在这里问这个问题。只要告诉我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);
}
答案 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 - 除非有一些关于“您必须使用其他编译器”的愚蠢规则。但它支持的大多数编译器都可以做得很挑剔:
- GCC(MingW / GNU GCC)
- MSVC ++
- 铛
- 数字火星
- Borland C ++ 5.5
- 打开Watcom
MSVC ++需要/W3
或其左右才能启用严格的警告,IIRC。可能还有更微妙的方法来设置警告;因为它认为标准C功能不安全,所以往往会变得相当嘈杂。 GCC和clang
都将采用我展示的选项。我希望数字火星可以与GCC和clang
相媲美,但不同。我不知道Borland或Open Watcom编译器,但是他们可能会在启用严格警告的情况下扭曲编译。