编译器抱怨“错误:程序中有杂散的‘�’”

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

需要我实现以下功能:

void calc ( double* a, double* b, int r, int c, double (*f) (double) )

参数a、r、c、f为输入,b为输出。 “a”和“b”是具有“r”行和“c”的二维矩阵 列。 “f”是一个函数指针,可以指向以下类型的任何函数:

double function‐name ( double x ) {
    …
}

函数

calc
将矩阵a中的每个元素,即aij,转换为矩阵b中的bij=f(aij)。


我实现

calc
功能如下,放到程序中测试一下:

#include <stdlib.h>
#include <iostream>

using namespace std;

double f1(double x){
    return x * 1.7;
}

void calc (double* a, double* b, int r, int c, double (*f) (double))
{
    double input;
    double output;

    for(int i=0; i<r*c; i++)
    {
        input = a[i];
        output = (*f)(input);
        b[i] = output;
    }
}

int main()
{
    // Input array:
    int r=3;
    int c=4;
    double* a = new double[r*c];
    double* b = new double[r*c];

    // Fill "a" with test data
    //...

    for (int i=0; i<r*c; i++)
    {
        a[i] = i;
    }

    // Transform  a to b
    calc(a, b, r, c, f1);

    // Print to test if the results are OK
    //...

    for (int i=0; i<r*c; i++)
    {
        b[i] = i;
    }

    return 0;
}

问题是,我无法编译它。这是当我点击 Compile and Execute 按钮时 DevC++ 的输出:

怎么了?

我感谢任何评论,以使实施更有效率。

c++ arrays function pointers matrix
9个回答
10
投票

在之前的回复中提到,这通常是在编译复制粘贴代码时出现的。如果您有 Bash shell,则通常可以使用以下命令:

iconv -f utf-8 -t ascii//translit input.c > output.c

6
投票

看来你的来源中有非法字符。我不知道

\240
应该是什么字符,但显然它在第 10 行的开头

在您发布的代码中,问题不存在:Live On Coliru


5
投票

/240
错误是由于每行代码前的非法空格引起的。

例如。

printf("任何东西");

代替

 printf("任何东西");

当您在 IDE 中复制和粘贴代码时,此错误很常见。


2
投票

您的程序中有无效/不可见的字符。

当您从另一个网站或有时从文档复制和粘贴代码时,您很可能会拾取这些不可见的字符。将代码从站点复制到另一个文本文档,然后复制并粘贴到您的代码编辑器中可能会起作用,但是根据您的代码的长度,您应该逐字逐句地输入它。


1
投票

我刚刚复制完整行时遇到了同样的错误,但是当我再次重写代码时,即完全写入而不是复制粘贴,然后错误不再存在。

结论:复制的语言可能有一些不可接受的词导致这个错误。


1
投票

解决方案: 删除那行代码(如果你从另一个源文档复制它)并自己输入。

Error: stray '�' in program 只是一个字符编码错误消息。

根据我的经验,这只是字符编码的问题。例如,如果您从网页复制一段代码,或者您先在文本编辑器中编写代码,然后再在 IDE 中复制和粘贴,那么它可以带有源文档或编辑器的字符编码。


0
投票

由于整个代码中的非法空格,我遇到了同样的问题。

我通过选择这些空格之一来修复它,并使用

find and replace
将所有匹配项替换为常规空格。


0
投票

我做了以下事情来解决这个问题:

  • 将损坏的代码粘贴到 txt 文件中。
  • 用十六进制编辑器打开代码文件。
  • 用空字符串替换您在文档中找到的每一个“C2A0”十六进制链。
  • 保存它。

现在您应该可以毫无问题地复制文本代码了。


0
投票

我清除了代码中所有的红色空间。即错误空间。然后代码工作得很好。

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