Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 特殊符号和命令行参数_C - Fatal编程技术网

C 特殊符号和命令行参数

C 特殊符号和命令行参数,c,C,当用户试图用特殊符号的命令行参数启动程序时,如何编写显示错误的代码?我的程序在用户只键入1或0时工作,我知道如何保护我的程序不受其他数字的影响,但我不知道如何处理特殊符号。 我所说的特殊符号是指,例如“$#”等。我试图应用您的解决方案,但仍然不起作用。问题是,当我用“121”运行程序时,它工作正常,显示错误“error”,但当用“1#”运行程序时,它只是停止工作,不显示“error” C语言 int main(int argc, char *argv[]) { FILE *in = arg

当用户试图用特殊符号的命令行参数启动程序时,如何编写显示错误的代码?我的程序在用户只键入1或0时工作,我知道如何保护我的程序不受其他数字的影响,但我不知道如何处理特殊符号。
我所说的特殊符号是指,例如“$#”等。我试图应用您的解决方案,但仍然不起作用。问题是,当我用“121”运行程序时,它工作正常,显示错误“error”,但当用“1#”运行程序时,它只是停止工作,不显示“error” C语言

 int main(int argc, char *argv[])
 {
 FILE *in = argc > 1 ? fopen(argv[1], "r") : stdin;
 double x; 
  if (in != NULL){
     while (fscanf(in, "%lf", &x) == 1){
     if(x != 1 && x != 0){
        printf("ERORR");
        return 1;
   }
不清楚什么是“特殊标志”。我假设您引用了不正确的输入,这将防止代码跳过错误的标记。考虑一个不同的循环来读取令牌,并验证输入。假设每个令牌最多20个字符

#include <stdio.h>
#include <stdboolh>

static bool scan_int(FILE *fp, int *res_p) 
{
   bool first = true ;
   while ( 1 ) {
       int r = sscanf(work, " %d", res_) ;
       if ( r == 1 ) return true ;
       if ( r == EOF ) return false ;
       // print a message on first error
       if ( first ) { printf("ERROR\n") ; first = false ; };
       // try skipping a character ;
       getchar() ;
}


int main(int argc, char *argv[])
{
     FILE *in = argc > 1 ? fopen(argv[1], "r") : stdin;
     if (in != NULL){
        int x ;
        while ( scan_int(in, &x) ) {
            if ( x != 0 ||  x != 1)) {
               printf("ERROR\n");
               return 1;
           } ;
         ...
         }
     }
}
#包括
#包括
静态布尔扫描(文件*fp,int*res\p)
{
bool first=true;
而(1){
int r=sscanf(工作,“%d”,资源);
如果(r==1)返回true;
如果(r==EOF)返回false;
//第一次出错时打印消息
如果(first){printf(“ERROR\n”);first=false;};
//尝试跳过一个字符;
getchar();
}
int main(int argc,char*argv[])
{
文件*in=argc>1?fopen(argv[1],“r”):stdin;
if(in!=NULL){
int x;
while(扫描int(in和x)){
如果(x!=0 | | x!=1)){
printf(“错误\n”);
返回1;
} ;
...
}
}
}

从文章中可以看出,如果输入值无效(0,1),代码应该忽略非数字(特殊符号),但退出(从main返回1)。保留此逻辑。

首先向我们展示您现在使用的代码。如果您给出一个最小的、可验证的示例,您可能会立即得到答案。如果一个片段不完整,则取决于谁阅读以及他们有多聪明。“特殊符号”是相当不具体的;我建议你澄清一下你的意思,也许还可以举一个例子,说明你没有处理这些论点。祝你好运!你的第一个OR(
|
)应该是and(
&&&
)你的括号放错地方了。谢谢你的检查。不坐在桌面前很难把事情弄好。我的意思是,例如“$#”等。我试图应用你的解决方案,但仍然不起作用。问题是,当我用“121”运行程序时,它工作正常,但显示错误“error”但当运行带有“1”的程序时,它只是停止工作,不会显示“ERROR”@Monika。输入“#1”后,上面的代码将设置x=1,并将继续运行nng。可能会在其他地方进入无限循环。看起来您需要一个读取数字(int/double)的函数,但会忽略非数字(“特殊值”)。建议编辑问题以更清楚地反映这一点。此外,输入是来自一行的值,还是可能来自一行的多个值?