scanf持续执行,不让它后面的语句执行

scanf持续执行,不让它后面的语句执行,c,C,每次我执行程序时,只要scanf语句开始执行,它就会一次又一次地执行,并且程序无法连续输入输入。我想您的程序应该计算输入的数字的交叉和 所以你可能想要这个: int main() { int number, factor = 1, temp, sum = 0; scanf ("%d", &number); temp = number; while(temp) { temp = temp % 10; factor = factor *10; };

每次我执行程序时,只要scanf语句开始执行,它就会一次又一次地执行,并且程序无法连续输入输入。

我想您的程序应该计算输入的数字的交叉和

所以你可能想要这个:

int main() {
  int number, factor = 1, temp, sum = 0;
  scanf ("%d", &number);
  temp = number;

  while(temp) {
    temp = temp % 10;
    factor = factor *10;
  };
  while(factor > 1) {
    factor = factor / 10;
    sum += (number / factor);
    number = number % factor;
  };
  printf("sum is %d\n");
}
代码中有两个问题:

  • temp=temp%10
    ->
    temp=temp/10
    %
    是“模”运算符,您需要“除”运算符
  • printf(“总和是%d\n”)
    ->
    printf(“总和是%d\n”,总和)
  • 所以这个问题与scanf完全无关

    int main() {
      int number, factor = 1, temp, sum = 0;
      scanf("%d", &number);
      temp = number;
    
      while (temp) {
        temp = temp / 10;
        factor = factor * 10;
      };
      while (factor > 1) {
        factor = factor / 10;
        sum += (number / factor);
        number = number % factor;
      };
      printf("sum is %d\n", sum);
    }
    

    是temp除以10时的余数,除了以0或10的倍数结尾的数字外,temp永远不会为0,因此
    while(temp)
    是一个无限循环
    scanf
    读取一次。

    而(temp){temp=temp%10;…}
    将永远不会完成,除非temp可被10整除。此程序应该做什么<代码>printf(“总和为%d\n”)是错误的,您可能是指
    printf(“总和是%d\n”,总和)。请正确格式化您的程序。为什么您认为是
    scanf
    导致了您的问题。您是如何验证它在输入数字后没有返回的?您的意思可能是
    temp=temp/10
    “只要
    scanf
    语句开始执行,它就会一次又一次地执行,并且程序无法连续输入。”
    scanf()
    不在循环中,只被调用一次。此代码不可能“在连续输入时被卡住”。发布的代码是否是存在问题的实际代码?修复%10中的temp/10修复了问题,但为什么命令行在修复之前连续接收输入?这是由于无限循环造成的随机行为吗?@Ryuzaki不是,你只是认为是。@Ryuzaki你可以在任何程序的执行过程中键入任何内容。这并不意味着程序正在阅读它。这意味着shell将向您显示您键入的内容,如果程序不使用它,shell将在下一步执行该操作。
    temp = temp % 10;