Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/55.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
从命令行读取并使用sscanf转换为整数_C_Scanf - Fatal编程技术网

从命令行读取并使用sscanf转换为整数

从命令行读取并使用sscanf转换为整数,c,scanf,C,Scanf,我在将argv[3]读取为字符串,然后将其作为要转换的整数包含时遇到问题。我知道strtol可以做到这一点,但sscanf应该足够了?使用if strcmp(argv[],声明的原因是我稍后将添加基数16和基数8。非常感谢 #include <stdio.h> #include <math.h> int binary_decimal(char *); int main(int argc, char **argv) /* Declare data types*/

我在将argv[3]读取为字符串,然后将其作为要转换的整数包含时遇到问题。我知道strtol可以做到这一点,但sscanf应该足够了?使用if strcmp(argv[],声明的原因是我稍后将添加基数16和基数8。非常感谢

 #include <stdio.h>
 #include <math.h>
 int binary_decimal(char *);
 int main(int argc, char **argv)
 /* Declare data types*/
 {
 if (strcmp(argv[1], "dec")) {  
     if (strcmp(argv[2], "bin")) {
    binary_decimal();
          }}
 }
 /* Other if statements for number systems to come*/
 int binary_decimal(char *n) 
 /* Function to convert binary to decimal.*/
 {
    char bin; int dec = 0;
    while (bin != '\n') {
    sscanf (argv[3],"%d",&num);
    if (bin == '1') dec = dec * 2 + 1;
    else if (bin == '0') dec *= 2; }
    printf("%d\n", dec);
 }
#包括
#包括
整数二进制小数(字符*);
int main(int argc,字符**argv)
/*声明数据类型*/
{
if(strcmp(argv[1],“dec”){
如果(strcmp(argv[2],“bin”)){
二进制小数();
}}
}
/*数字系统的其他if语句*/
整数二进制小数(字符*n)
/*函数将二进制转换为十进制*/
{
字符位;int-dec=0;
而(bin!='\n'){
sscanf(argv[3]、“%d”、&num);
如果(bin='1')dec=dec*2+1;
如果(bin='0')dec*=2;}
printf(“%d\n”,dec);
}
这些行

if (strcmp(argv[1], "dec")) {  
     if (strcmp(argv[2], "bin")) {
    binary_decimal();
          }}
需要

if (strcmp(argv[1], "dec") == 0) {  // Add == 0. strcmp returns 0 when the strings are equal
     if (strcmp(argv[2], "bin") == 0) { // Add == 0
    binary_decimal(argv[3]);  // Add the argument in the function call
          }}
二进制和十进制中的问题:

int binary_decimal(char *n) 
{
    char bin; int dec = 0;
    while (bin != '\n') {        // bin has not been initialized.
    sscanf (argv[3],"%d",&num);  // argv is not visible in this function.
                                 // Also, num is not a variable.
    if (bin == '1') dec = dec * 2 + 1;
    else if (bin == '0') dec *= 2; }
    printf("%d\n", dec);
}
这是一个改进的版本:

int binary_decimal(char *n) 
{
   char* cp = n;
   int dec = 0;

   // Step through the given argument character by character.
   for ( ; *cp != '\0'; ++cp )
   {
      // The characters have to be 0 or 1.
      // Detect invalid input.
      if ( *cp != '\0' && *cp != '1' )
      {
         // Deal with invalid input
      }

      // Accumulate the decimal value from the binary representation
      dec = 2*dec + (*cp-'0');
   }

   return dec;
}

strcmp()
如果字符串相等,则返回0..您正在检查字符串是否不相等..我在读取
argv[]时遇到问题
在这段代码中也是如此,主要是它不是
二进制_十进制
的参数,但却不知怎么地出现在它的函数体中。是的,我知道这段代码有几个问题,这就是我为什么要问的原因。
bin
未初始化,你也有一个无限循环!