代码有问题或者我的 IDE/comp 有问题吗?

问题描述 投票:0回答:1

我今天尝试刷新一些有限的 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 - 使用不同的编译器)...

对于 2 段代码(单独构建和编译不起作用)

第一个代码非常简单,只是将 2 个值相加并将它们赋予“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);
}

正如上面所说,它根本不起作用! (我的目的是在行输出右侧显示 var "a" 40 个空格的值)它返回一条空消息或窗口弹出一个致命错误窗口...(取决于我昨天电脑的心情今天只有控制台返回了空消息,它决定告诉窗口控制台窗口没有响应...)

如果我像这样编辑代码:

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

return(0);
}

它可以工作,但在任何 intreusult 前面显示一个 ascII 字符..像这样:

(奇怪的是,当我输入数字 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);
}
c variables debugging
1个回答
5
投票
printf("%40s, %d",a);

您已经告诉 printf() 打印一个字符串,但没有给它一个字符串。

尝试:

printf("%40s, %d","",a);

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

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

© www.soinside.com 2019 - 2024. All rights reserved.