C 变量超出for循环中的指定限制

C 变量超出for循环中的指定限制,c,C,我已经编写了查找数字的单位和十位数的代码,但是当数字大于99时,我面临一个问题。在for循环中,I的值被设置为小于10,但是当我执行no=100的代码时,我发现I的值为10 为什么会这样 #include <stdio.h> int unit(int x){ return x%10; } int ten(int x){ int temp=x-unit(x); if(temp==0){ return 0; } else{ for(int i=1;i

我已经编写了查找数字的单位和十位数的代码,但是当数字大于99时,我面临一个问题。在for循环中,I的值被设置为小于10,但是当我执行no=100的代码时,我发现I的值为10

为什么会这样

#include <stdio.h>
int unit(int x){
  return x%10;
}

int ten(int x){
  int temp=x-unit(x);
  if(temp==0){
    return 0;
  }
  else{
    for(int i=1;i<10;i++){
        if(temp%(i*10)==0 && temp/(i*10)==1){
            return i;

        }
    }
  }
}

int main(){
  int no=100;
  printf("%d",ten((no)));
  return 0;
}
1在10的else块中,仅当满足某些条件时才返回值。如果条件不满足,您将不会返回任何内容。在这种情况下,可以打印垃圾值

2要得到第十位数字,这是一项艰巨的工作。只需将函数体更改为-

int ten(int x) {
 return (x % 100) /10;
}
因为条件满足,所以最大为99的数字得到正确的结果。以99为例。减去单位数字后,你得到90。当i变为9时,临时%i*10变为0,临时/i*10变为1


当数字为100时,减去单位数字后,数字保持不变。100但是对于从1到9的i值,temp/i*10永远不会变为1,循环将退出,从而导致荒谬的行为。使用您的代码,所有大于99的数字都会得到相同的行为。

想想当数字大于99时会发生什么。您将无法找到i b/w 1和9的值,从而使if中的表达式为真。你需要一个i>10的值,但是当然,它不是数字的十位数

您的方法仅适用于特定情况,即数字为b/w 1和10^2时。当然,你可以写更多的代码来处理数字b/W1和10^3,但那只是一个麻烦。即使如此,如果数字大于这个数字,你也必须写更多的代码

试着为一般情况想出一个解决方案。要做到这一点,两个事实将非常有用:

使用/除法只给出答案的整数部分。例:66/10=6 %此运算符将为您提供余数。例:59%10=9
不清楚你想做什么。例如,我不理解这个短语代码来查找单位和十位数。