在C中将字符串值转换为int等效值

时间:2013-12-25 17:22:32

标签: c scanf

有人可以告诉我这有什么问题:

int main()
{
char a[100];
int i = 0;
printf("Enter a number: ");
scanf("%c", &a[i]);

printf("The number you've entered is: %d", a[i] - '0');
} 

摘要:我正在尝试将存储在char数组中的数字转换为其int等效数字。我知道在C#中,你使用intparse命令,但由于C中没有这样的命令,我不知道该怎么做。当我输入两位数字时,它只输出输入char的第一个数字。

5 个答案:

答案 0 :(得分:3)

strtol示例

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

int main(){
    char str[16], *endp;
    int value;
    printf("Enter a number: ");
    fgets(str, sizeof(str), stdin);
    value = strtol(str, &endp, 0);
    if(*endp == '\n' || *endp == '\0'){
        printf("The number you've entered is: %d\n", value);
    } else {
        printf("invalid number format!");
    }
    return 0;
}

答案 1 :(得分:1)

如果您打算打印char的ASCII值,则无需执行a[i] - '0'。 试试这个

 printf("The number you've entered is: %d", a[i]); 

如果您正在谈论字符串,请先将scanf语句更改为

scanf("%s", a);  

或更好地使用fgets库函数而不是scanf;

fgets(a, sizeof(a), stdin);

然后使用strtol函数。

答案 2 :(得分:0)

scanf("%c", &a[i]);的OP方法仅处理1个字符的输入。

要阅读整行,建议使用fgets()进行阅读 使用long转换为strtol() 注意潜在的错误。

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

int main(){
  // use long to match strtol()
  long i;
  // size buffer to handle any legitimate input 
  char a[sizeof i * 3 + 3];
  char *endptr;
  printf("Enter a number: ");
  if (fgets(a, sizeof a, stdin) == NULL) {
    // If you would like to handle uncommon events ...
    puts("EOForIOError");
    return 1;
  }
  errno = 0;
  i = strtol(str, &endptr, 10);
  if(*endptr != '\n' /* text after number */ || 
      endp == a      /* no text */           || 
      errno          /* overflow */) {
    printf("Invalid number %s", a);
  }
  else {
    printf("The number you've entered is: %ld\n", i);
  }
  return 0;
}  

答案 3 :(得分:-1)

尝试

char myarray[5] = {'-', '4', '9', '3', '\0'};
int i;
sscanf(myarray, "%d", &i); // i will be -493

编辑(借鉴[1]):

网站上有一个很棒的问题here,它解释并比较了3种不同的方法 - atoisscanfstrtol。此外,还有一个更详细的洞察sscanf(实际上,*scanf函数的整个系列)。

答案 4 :(得分:-1)

#include<stdio.h>
#include<stdlib.h>
int main()
{

char a[100];

int final=0,integer;

int i;

printf("Enter a number: ");

gets(a);

for(i=0;a[i]>='0'&&a[i]<='9';++i)

{

integer=a[i] - '0';

final=final*10+integer;

} 

    enter code here

printf("The integer is %d ", final);

}