Usando la división para juzgar el número de dígitos BUG está aquí nuevamente

Error 1 (ingresado en un bucle infinito) ↓

#pragma warning(disable:4996)//为了防止scanf()函数因为没有返回值而报错
#include<stdio.h>

//用除余法:判断数字为几位数
int main() {
    
    
	long long n;
	int a,i=1;

	printf("请输入一个数字:\n");
	scanf("%d", &n);

	a = n / 10;

	for(i = 1; a < 1; i++){
    
    	//这里应改为 a>1, for循环条件句为真时才执行循环体
		a = n / 10;	//这里应该改为a=a/10
	}

	printf("n是%d位数", i);

	return 0;

}

Correcto 3
Se informó un error al principio,
(más tarde , después de volver a compilar con liberación y depuración, no se informó ningún error)

#pragma warning(disable:4996)//为了防止scanf()函数因为没有返回值而报错
#include <stdio.h>

//用除余法:判断数字为几位数
int main() {
    
    

	long long n;
	long long  i=1;
	int a;

	printf("请输入一个数字:\n");
	scanf("%d", &n);

	a = n / 10;

	for (i = 1; a > 0; i++) {
    
    
		a = a / 10;
	}
	
	printf("n是 %lld 位数", i);

	return 0;
}

Correcto 1 ↓

#pragma warning(disable:4996)//为了防止scanf()函数因为没有返回值而报错
#include<stdio.h> 
int main() {
    
    

	long long n;
	long long  i=1;
	int a;
	
	printf("请输入一个数字:\n");
	scanf("%d", &n);
	
	a = n / 10;
	
	for (i = 1; a > 0; i++) {
    
    
		a = a/ 10;
	}
	printf("n是 %lld 位数", i);

	return 0;
}

Correcto 2 ↓

#pragma warning(disable:4996)//为了防止scanf()函数因为没有返回值而报错
#include <stdio.h>

//用除余法:判断数字为几位数
int main() {
    
    

	int n;
	int  i=1;
	int a;

	printf("请输入一个数字:\n");
	scanf("%d", &n);

	a = n / 10;

	for (i = 1; a > 0; i++) {
    
    
		a = a / 10;
	}

	printf("n是 %d 位数", i);

	return 0;
}

En realidad, la pregunta clave está aquí:

Inserte la descripción de la imagen aquí
En este bucle for, el valor de n no ha cambiado, por lo que a no ha cambiado y se convierte en un bucle infinito, por lo que es incorrecto.

posdata

Cuando ejecuta el programa de la Consola en VS2019, la depuración dividida y la liberación,
en la que el proceso de depuración generará una gran cantidad de documentos, y se han ocultado, no sé qué se está ejecutando en segundo plano,
mientras que la versión es el editor directo, no Tanto el proceso de documentos,
cada uno tiene ventajas y desventajas.

En mi práctica en estos días, habrá problemas inexplicables después de usar debug para ejecutar el programa muchas veces, pero el programa correcto no se ejecutará, por lo que deberíamos prestar más atención a esto en el futuro. A veces no es el error del programa, sino el problema del compilador en sí., esto es realmente molesto, así que tengo la oportunidad de estudiarlo en el futuro.

Información:
comprensión profunda de la diferencia entre depurar y liberar

Supongo que te gusta

Origin blog.csdn.net/weixin_42417585/article/details/105126760
Recomendado
Clasificación