代码或我的IDE/comp中的问题被窃听?

-4 c compiler-construction variables debugging

我尝试刷新我今天用C语言提供的一些有限的知识,并且我在非常简单的代码上遇到了一些问题,我无法定义它们的本质....

或者我做了一个非常愚蠢的错误或者有些事情被窃听......

我使用了codeblocks v12.11 IDE并将其设置为C中的程序项目(这是下载二进制文件的链接:http://www.codeblocks.org/downloads/binaries)我使用了它的~90MB版本附带GCC编译器....

我在windows xp和windows 7机器上使用了这个IDE(和dev-C++ http://www.bloodshed.net/download.html-使用不同的编译器)...

两个代码(单独构建和编译不起作用)

第一个代码是一个非常简单的代码,它只是将两个值相加并将它们赋予一个"a"变量......

这里是:

#include <stdio.h>

int main()
{
    int a,b,c,f;
    b=10;
    scanf("%d",&c);
    a=b+c;
    printf("%40s, %d",a);

return(0);
}
Run Code Online (Sandbox Code Playgroud)

因为它在上面它不能全部工作!(我的目的是在lineoutput的右边显示var"a"40个空格的值)它返回一个空消息或者窗口弹出一个致命的错误窗口...(取决于我的电脑昨天的情绪只有今天控制台返回了一条空消息,它决定告诉windows控制台窗口没有响应...)

如果我编辑这样的代码:

int main()
{
int a,b,c,f;
b=10;
scanf("%d",&c);
a=b+c;
printf("%40s"); 
printf("%d",a);

return(0);
}
Run Code Online (Sandbox Code Playgroud)

它有效,但在显示ascII字符的任何intreusult前面..像这样:

(奇怪的是,当我输入数字7时,它不显示一个字符,而是我的电脑发出哔哔声......如果我输入一个非数字字符,它会像这样无休止地循环:

如果我将变量的类型更改为FLOAT一切正常..但是你猜对了结果不是整数....

有趣的是,如果所有内容都转向FLOAT,但是在scanf属性上,输入设置为int [scanf("%d",&c);]程序仍然可以工作并将结果显示为浮点数但是再次使用ascii字符他们......

另一个奇怪的事情是,当我输入像99999这样的大数字时,它会显示多个ascii字符,我希望它只返回没有ascii字符的结果,因为ascii字符代码是1到255之类的东西......

所以

  • 问题A:是我的编译器还是IDE错误(是全新安装)?

  • 问题B:如果我该怎么办?重新安装吗?一样的东西

    发生...

  • 问题C:如果它不是软件问题(IDE/COMP等)那么为什么会出现那些ascii字符?

PS要将所有结果一起投影并采用上面的打印屏幕框架,我使用了"while"循环它不会改变任何相同的结果,当我构建和编译代码而没有while循环时...但是要确保我粘贴使用"while"命令修改代码,以便在一个控制台中显示所有结果,以便我可以对它们进行打印.

int main()
{
int a,b,c,f;
b=10;
while(b=10){
scanf("%d",&c);
a=b+c;
printf("%40s"); 
printf("%d",a);
}        
return(0);
}
Run Code Online (Sandbox Code Playgroud)

Jas*_*onD 5

printf("%40s, %d",a);
Run Code Online (Sandbox Code Playgroud)

你告诉printf()打印一个字符串,但没有给它一个.

尝试:

printf("%40s, %d","",a);
Run Code Online (Sandbox Code Playgroud)

至于为什么当你这样做时会发生随机的东西,这是因为一个字符串作为指针传递,而不是那个指针你传递了一些其他数据(或者如果你什么也没有传递,那么它将是其他任何事情发生的事情.是参数应该在哪里),它将被解释为一个指针,并可能导致几乎任何事情发生.随机ascii打印,你的程序崩溃等

但是,如果随机指针恰好指向具有零终结符的东西,它会将其打印为字符串,然后用空格填充.当你使用两个printfs()时,可能会发生这种情况 - 只有一点随机垃圾,然后是零终结符.您甚至可能非常幸运,指针直接指向零,这看起来像一个空字符串.但这只是运气,你绝对不应该依赖它.正如您已经观察到的那样,再次运行它,或者在不同的时间运行它,或者在不同的机器上运行它,行为将会有所不同.

  • 对于假人而言,C或者"被窃听",或者你读错了.%40s必须有一个字符串作为参数的一部分.如果你使用gcc并启用警告,如果你"弄错了",你会收到警告 - 当涉及到更复杂的printf语句时,它很容易完成.因此,在IDE中找到启用警告的位置,并将其设置为"警告所有可用警告"(-Wall on the command line) (4认同)