Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/67.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
Arrays 如何使C语言中的程序在遇到特定条件时只打印一条语句?_Arrays_C_Command Line Arguments_Cs50 - Fatal编程技术网

Arrays 如何使C语言中的程序在遇到特定条件时只打印一条语句?

Arrays 如何使C语言中的程序在遇到特定条件时只打印一条语句?,arrays,c,command-line-arguments,cs50,Arrays,C,Command Line Arguments,Cs50,我一直在尝试编写一个C程序,其中用户输入一个命令行参数,程序检查它是否都是数字。如果这是真的,程序只需重新打印用户输入的内容。如果这是错误的,并且至少有一个非数字混入,程序只打印一次单词“bad” 到目前为止,我所讲的内容包括程序分别检查输入的每个字符。然而,一旦我把数字和字母混合在一起,程序仍然会打印数字,然后一旦打印出字母,它就会打印出“坏”这个词 下面是一个例子: 我将/program 100x放入终端 =>预期结果:坏 =>实际结果:100bad 代码如下: #include <

我一直在尝试编写一个C程序,其中用户输入一个命令行参数,程序检查它是否都是数字。如果这是真的,程序只需重新打印用户输入的内容。如果这是错误的,并且至少有一个非数字混入,程序只打印一次单词“bad”

到目前为止,我所讲的内容包括程序分别检查输入的每个字符。然而,一旦我把数字和字母混合在一起,程序仍然会打印数字,然后一旦打印出字母,它就会打印出“坏”这个词

下面是一个例子:

  • 我将
    /program 100x
    放入终端
=>预期结果:坏

=>实际结果:100bad

代码如下:

#include <cs50.h>
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <stdlib.h>

int main (int argc, string argv[])
{
    for(int i = 0; i < strlen(argv[1]); i++) {
        if (isdigit(argv[1][i]) != 0) {
            printf("%c", argv[1][i]);
            return 0;
        } else {
            printf("bad");
            return 1;
        }
    }
}
#包括
#包括
#包括
#包括
#包括
int main(int argc,字符串argv[])
{
对于(int i=0;i
试试这个:

 #include <stdio.h>
 #include <string.h>
 #include <ctype.h>
 #include <stdlib.h>

 int main (int argc, char *argv[])
 {
 //for(int i = 0; i < strlen(argv[1]); i++)
     {
    //if (isdigit(argv[1][i]) != 0)
    if(strspn(argv[1], "0123456789" )== strlen(argv[1]))
        {
        printf("%s", argv[1]);
        return 0;
        }

     else
     {
         printf("bad");
         return 1;
     }
 }


 }
#包括
#包括
#包括
#包括
int main(int argc,char*argv[])
{
//对于(int i=0;i
首先,我不认为您的程序正在做您描述的事情,因为它在遇到的第一个数字处返回。然后,当你看到一个数字,你打印它,你想首先检查你的输入是正确的,然后打印它。对于您的实现,您可以这样修改它:

#include <cs50.h>
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <stdlib.h>

int main (int argc, string argv[])
{
    // checking input
    for(int i = 0; i < strlen(argv[1]); i++) {
        if (!(isdigit(argv[1][i]) != 0)) {
            printf("bad\n");
            return 1;
        }
    }

    // here you know your input is good
    // prints input
    printf("%s\n", argv[1]);
    return 0;
}
#包括
#包括
#包括
#包括
#包括
int main(int argc,字符串argv[])
{
//检查输入
对于(int i=0;i
您的逻辑错误是,您的程序检查一个字符,并立即打印一个数字或一条错误消息,然后继续处理每个字符。但是,您需要尝试编写一个算法,首先检查整个字符串中除数字以外的字符。如果算法发现至少一个字符(结果为假),它可以使用“break”关键字关闭循环,并在之后打印“bad”。或者,如果所有字符都是数字,您可以返回值true,然后在屏幕上打印它们。

程序在第一次循环时终止。所有代码路径都执行一个
return
语句。它要么打印一个字符(并终止),要么打印单词bad(并终止)。您的算法错误。您说过程序应该首先检查输入,然后决定是打印整个输入还是打印坏字。但这并不是你实际的程序所做的。你不需要在这里对循环(或变量)进行
,我发现显式比较会降低可读性
(!(isdigit(argv[1][i])!=0))
vs
(!isdigit(argv[1][i])