C 应为标识符或“~”标记之前的“(”

C 应为标识符或“~”标记之前的“(”,c,debugging,token,getopt,pagerank,C,Debugging,Token,Getopt,Pagerank,我在做一个项目时遇到了一个问题。我知道有很多类似的问题可以回答,但是关于这个特殊的问题,我找不到任何帮助。我得到了以下错误: Compiling main.c main.c:42:1: error: expected identifier or '(' before '~' token ~ ^ Makefile:47: recipe for target 'obj/main.o' failed make: *** [obj/main.o] Error 1 编辑:我删除了代码的最后几行,但错误仍

我在做一个项目时遇到了一个问题。我知道有很多类似的问题可以回答,但是关于这个特殊的问题,我找不到任何帮助。我得到了以下错误:

Compiling main.c
main.c:42:1: error: expected identifier or '(' before '~' token
~
^
Makefile:47: recipe for target 'obj/main.o' failed
make: *** [obj/main.o] Error 1
编辑:我删除了代码的最后几行,但错误仍然发生在最后一行“}”之后

该项目是关于PageRank算法的,使用控制台中的选项来选择希望使用的算法。我试图读取或使用命令行中的选项,但错误甚至阻止我查看程序的语义

/*
* main.c
*
*Programmierung 2 - Projekt 2 (PageRank)
*/
#include <stdio.h>
#include <stdlib.h>
#include <getopt.h>

#include "utils.h" //is existing in the Directory


int main (int argc, char *const *argv) {
    //initialize the random number generator
    rand_init();

    printf("You gave %d command line arguments%c\n", argc-1, argc==1 ? '.' : ':');
    int graph;
    int i = 1;
    char * h = "-h show this help. \n";
    char * p = "...";
    char * m = "...";
    char * r = "...";
    char * s = "...";
    while ((graph = getopt(argc, argv, "hmprs")) != -1) {

        switch (graph) {
            default : printf("make -h | -m | -p | -r | -s "); break;
            case 'h' : printf("%s %s %s %s %s"), h, m, p, r, s); break;
            //this-like outcommended code like the one above
            //and again 
            //and once more
            //and a final one
        }
    printf(" - %s\n", argv[i]);
    i++;
    }
exit(0);
}
还有一件事:我遇到了一个关于案例“h”长度的问题:printf,所以我在多个字符中对文本进行了编码。
如果您需要有关任何内容的更多信息,请询问我。

编译器在第42行报告了一个错误,但您问题中的源代码只有33行,并且不包含~字符。您需要向我们显示您正在编译的整个源代码

但我有一个很好的猜测

错误消息显示在第1列中有一行带有~字符,后面没有任何内容。vi或vim文本编辑器使用~在屏幕上标记不属于文件的行。如果从vi编辑器会话复制并粘贴源文件,很容易复制太多行,并在源文件末尾额外添加~结束


编辑文件,跳转到结尾,然后删除那一行。

我现在得到了它。我的编译器vim在我看不见的地方添加了行。我使用了另一个编辑器,可以正确删除不必要的代码。是的,一直以来都是我的错。非常抱歉,这是漫长的一天。

在第42行的第一个字母中,等等,你在第42行哪里?你发布的代码只有3行2行。检查此行大小写“h”:printf%s%s%s%s%s,h,m,p,r,s;break;它有额外的括号我重新打开文件,现在有更多的行,我添加了它们。我看到的唯一问题是@aa1992注意到了额外的括号,并且您声明了两次p。但是您的错误看起来不正常。请尝试在新文件或其他文件中再次键入程序我做的,现在它告诉我它在第41行:1@SteamyBanana你在开玩笑,对吗?你自己也写过这段代码吗?只是迭代地应用提议规则。“奥拉夫,我是认真的。我正在试着修一个小时,在我的时区,在半夜我筋疲力尽……按照规则,你是指这段时间吗?”loop?@Olaf我用官方的c参考写下了所有的东西。请告诉我是不是那么琐碎:是什么导致了错误?我还是不知道。去睡觉吧!!问题会在早上出现,在你睡了一个好觉之后…一杯好咖啡…也许是一次轻快的晨游。完成了这一系列疯狂的工作从事专业工作已经32年多了,我可以肯定地说,你必须知道什么时候关掉这台该死的电脑!!毕竟只有1和0。记住!