有人可以告诉我这有什么问题:
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
的第一个数字。
答案 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种不同的方法 - atoi
,sscanf
和strtol
。此外,还有一个更详细的洞察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);
}