未在此范围内声明错误

时间:2015-06-27 16:50:14

标签: c scope this

我正在编写这个简单的代码,如果我输入两个数字并显示解决方案。这是代码:

#include <stdio.h>

int main()
{
    printf("Enter two numbers:")
    ;scanf("&d &d", a, b)
    ;printf("=======================\n"); /*  */
    /*  */
    printf("The sum of %d and %d is %d.\n\n", 3, 4, 3 + 4)
    /*  */
    ;printf("The difference of %d and %d is %d. \n\n", 3, 4, 3-4)
    /*  */
    ;printf("The product of %d and %d is %d. \n\n", 3, 4, 3*4)
    /* sum of squares would be a*a + b*b */
    ;printf("The sum of the squares of %d and %d is %d. \n\n", 3, 4, 3*3 + 4*4)
    ;printf("**end**"); /* :-) */ 
    ;return (0);
}

我不断收到错误消息:

[Error] 'a' was not declared in this scope 
and
[Error] 'b' was not declared in this scope

它出了什么问题?

3 个答案:

答案 0 :(得分:1)

首先声明两个变量是否缺失。 首先声明它们,在你的情况下int最好,所以:

int a, b;

然后你还需要将指针传递给scanf()函数,因此它可以在变量中写入值,如下所示:

scanf("%d %d", &a, &b);

检查这些值是否已被读取也是一种很好的做法。 scanf()返回它从输入中成功解析的值的数量,因此在你的情况下,如果成功则返回2,测试它。

同样初始化变量并不是一个坏主意,所以也许可以这样做:

int a = 0, b = 0;

你也似乎没有在你的程序的其余部分使用变量,你可能想要对此做些什么。

答案 1 :(得分:0)

在尝试在其中存储任何内容之前,您需要声明变量。

int  a,b;

该行必须是主函数的第一行。

编辑:确定您的代码看起来像这样吗?

int main()
{
    int  a,b;
    printf("Enter two numbers:")
    ;scanf("&d &d", a, b)
    ;printf("=======================\n"); /*  */
    /*  */
    printf("The sum of %d and %d is %d.\n\n", 3, 4, 3 + 4)
    /*  */
    ;printf("The difference of %d and %d is %d. \n\n", 3, 4, 3-4)
    /*  */
    ;printf("The product of %d and %d is %d. \n\n", 3, 4, 3*4)
    /* sum of squares would be a*a + b*b */
    ;printf("The sum of the squares of %d and %d is %d. \n\n", 3, 4, 3*3 + 4*4)
    ;printf("**end**"); /* :-) */ 
    ;return (0);
}

答案 2 :(得分:0)

1.使用前必须申报变量。 您正在使用下面的a和b。但你以前没有宣布它。所以它肯定会给你错误。

- (IBAction)takephoto:(id)sender {

    AVCaptureConnection *videoConnection = nil;

    for (AVCaptureConnection *connection in StillImageOutput.connections) {
        for (AVCaptureInputPort *port in [connection inputPorts ]) {
            if ([[port mediaType] isEqual:AVMediaTypeVideo]) {
                videoConnection = connection;
                break;
            }
        }
    }
    [StillImageOutput captureStillImageAsynchronouslyFromConnection:videoConnection completionHandler:^(CMSampleBufferRef imageDataSampleBuffer, NSError *error) {
        if (imageDataSampleBuffer != NULL) {
            NSData *imageData = [AVCaptureStillImageOutput jpegStillImageNSDataRepresentation:imageDataSampleBuffer];
            UIImage *image = [UIImage imageWithData:imageData];
            imageView.image = image;
        }
    }];
}

2.它也必须使用&#39;&amp;&#39;使用a和b同时从用户获取价值。它不会给你错误,但可能会给你不正确的结果,你不想要。

scanf("&d &d", a, b);

3.Indentation也不好。你需要使用&#39 ;;&#39;在声明的最后,而不是在陈述下一个声明或任何其他编码行之前。它不会给你错误,但它易于理解代码和易于阅读。

scanf("&d &d", &a, &b);