将字符转换为整数

4
我正在尝试输入一系列数字(例如123456789),然后逐个输出每个数字(例如1, 2, 3, ... , 9)。但是,在数字9之后,也就是str[9]之后,输出值会变成随机数字,例如-48, 32, 9, -112。我该如何确保输出数字停止于9,因为我输入的最后一个数字是9?
#include<stdio.h>
#include<string.h>

int main()
{
  char str[100];
  int n,num[100];
  scanf("%s", str);
  for(n=0;n<100;n++)
    {
      num[n] = str[n] - '0';
      printf("%d\n", num[n]);
    }
  return 0;
}

2
str[n] == 0 时停止你的循环。 - M.M
1
n<100 --> n<100 && str[n]。另外,str[8]'9' - BLUEPIXY
哇,只需要这样就可以了。谢谢! - M.H.F
4个回答

0

你可以比较ASCII值。

#include<string.h>
#include<stdio.h>
int main(){
 char str[100];
 int n,num[100]=0;
 scanf("%s", str);
 while(str[n]<58 && str[n]>47){
  num[n] = n*num[n]+str[n];
 n++; 
}
printf("%d\n", num[n]);
return 0;

}


0

看起来你应该逐个字符地处理输入,而不是作为一个字符串。这将消除看似任意的100个字符限制的需要。在打印之前,你可以验证字符是否为数字,在找到第一个非数字时终止循环。

#include <ctype.h>
char c;
scanf( "%c", c );
while (isdigit(c))
{
    printf("%c\n", c );
}

0

你从 scanf 输入的字符串可能少于100个字符,使用 strlen 获取其大小:

int main(void)
{
    char str[100] = {0};
    int num[100];
    size_t len, n;
    scanf("%s", str);
    len = strlen(str);
    for(n=0;n<len;n++)
    {
        num[n] = str[n] - '0';
        printf("%d\n", num[n]);
    }
    return 0;
}

请注意使用 int main(void) 而不是 int main()

0
你需要获取输入字符串的长度,使用strlen(str)函数,并将该值存储在一个变量中,在循环中根据字符串长度进行迭代。就是这样: 在这里,我做了以下操作:
#include<stdio.h>
#include<string.h>
int main()
{
 char str[100] = {};
 int n = 0,count = 0,num[100] = {};
 scanf(" %s", str);
 count = strlen(str);
 for(n = 0; n < count; n++) 
 {
   num[n] = str[n] - '0';
   printf("%d\n", num[n]);  
 } 
 return 0;
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接