从命令行读取并使用sscanf转换为整数
我在将argv[3]读取为字符串,然后将其作为要转换的整数包含时遇到问题。我知道strtol可以做到这一点,但sscanf应该足够了?使用if strcmp(argv[],声明的原因是我稍后将添加基数16和基数8。非常感谢从命令行读取并使用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*/
#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
未初始化,你也有一个无限循环!