Una pregunta sobre el lenguaje C, ¡ayuda!
a===b es el signo igual;
Esta es una larga lista de errores comunes cometidos por principiantes
En C Idioma ¡Errores comunes! Una lectura obligada para principiantes
Las características más importantes del lenguaje C son: potente, fácil de usar y flexible. La verificación de sintaxis al compilar programas en lenguaje C no es tan estricta como en otros lenguajes de alto nivel, lo que deja a los programadores "espacio para la flexibilidad". Sin embargo, esta flexibilidad trae muchos inconvenientes a la depuración de programas, especialmente para aquellos que son nuevos. al lenguaje C, a menudo cometen errores que ni siquiera saben qué hacer. A menudo hay errores que ni siquiera yo sé dónde los cometí. Al mirar el programa erróneo, no sé cómo corregirlo. A través del estudio del lenguaje C, el autor acumuló algunos errores de programación en lenguaje C y los anotó para referencia de sus compañeros.
1. Al escribir identificadores, se ignora la diferencia entre letras mayúsculas y minúsculas.
main()
{
int a=5;
printf("d", A);
}
El compilador piensa que a y A son dos nombres de variables diferentes y muestra un mensaje de error. El lenguaje C considera que las letras mayúsculas y minúsculas son dos caracteres diferentes. Para mejorar la legibilidad, normalmente se utilizan letras mayúsculas para nombres de constantes simbólicas y letras minúsculas para nombres de variables.
2. Ignora el tipo de variable y realiza una operación ilegal.
main()
{
flotante a, b;
printf("d", ab);
}
es la operación de resto, utilizada para obtener el resto entero de a/b. Las variables enteras a y b pueden tener resto, mientras que las variables reales no permiten la "remanencia".
3. Constantes de caracteres y constantes de cadena confusas.
char c;
c="a";
Una constante de carácter es un carácter único encerrado entre un par de comillas simples, mientras que una constante de cadena es encerrado en Un par de secuencias de caracteres entre comillas dobles, el sistema agregará automáticamente constantes de cadena. El lenguaje C especifica "\" como el indicador de final de cadena y el sistema agregará automáticamente este indicador. Por lo tanto, la cadena "a" en realidad contiene dos caracteres: "a" y "\". a una variable de carácter de.
4. Ignora la diferencia entre "=" y "==".
En muchos lenguajes de alto nivel, el símbolo "=" se utiliza como operador relacional "igual". Por ejemplo, en un programa BÁSICO, puedes escribir
if (a=3) entonces...
Pero en lenguaje C, "=" es el operador de asignación, mientras que " == es un operador relacional. Por ejemplo:
if (a==3) a=b;
El primero es para comparar si a es igual a 3, y el segundo significa que si a es igual a 3, el valor de b se asigna a a. Los principiantes suelen cometer este error debido a los hábitos.
5. Olvidé agregar un punto y coma.
El punto y coma es una parte integral de una declaración C y debe aparecer al final de la declaración.
a=1
b=2
Al compilar, el compilador no encontró un punto y coma después de "a=1", y la siguiente línea "b =2" "Esto sería un error de sintaxis como parte de la declaración anterior. Al corregir errores, a veces el error no se encuentra en la línea donde se señala el error, por lo que debe verificar la línea anterior para ver si falta un punto y coma.
{ z=x y;
t=z/100;
printf("f", t
}
Para declaraciones compuestas, el último punto y coma de la última declaración no se puede omitir (a diferencia de PASCAL).
6. Más punto y coma.
Para declaraciones compuestas, por ejemplo:
{ z=x y;
t=z/100; " , t);
};
No se puede agregar un punto y coma después del paréntesis en una declaración compuesta, de lo contrario será superfluo.
Otro ejemplo:
if (a3==0);
I ; Si 3 se divide por a, se debe agregar 1 a I, pero debido a que hay un punto y coma adicional después de if (a3 == 0), la declaración if termina aquí Cuando el programa ejecuta I, independientemente de si 3 se divide por a. , Automáticamente agregará 1 a I.
Otro ejemplo:
Por ejemplo:
for (a3=0);
Esta es una declaración compuesta y no debe seguido Hay un punto y coma. p>
for (I=0;Ilt;5;I);
{scanf("d",amp;x);
printf( "d",x);}
El propósito es ingresar 5 números continuamente y luego generar después de cada número. Dado que hay un punto y coma adicional después de for(), el cuerpo del bucle se convierte en una declaración vacía, por lo que solo se puede ingresar y generar un número.
7. Olvidé agregar el operador de dirección "amp;" al ingresar variables.
int a, b;
scanf("dd", a, b
Esto es ilegal. La función de scanf es almacenar los valores de ayb según sus direcciones en la memoria. "&a" se refiere a la dirección de a en la memoria.
8. Introducir datos que no cumplan los requisitos.
①scanf("dd",amp;a,amp;b);
Al ingresar, las comas no se pueden usar como separadores entre dos datos. Por ejemplo, la siguiente entrada es ilegal. :
3, 4
Al ingresar datos, debe haber uno o más espacios entre los dos datos. También puede usar la tecla Enter o la tecla Tab para saltar.
② scanf("d, d", amp; a, amp; b);
C estipula que si la cadena de "control de formato" contiene otros caracteres además de las instrucciones de formato. , debe ingresar los mismos caracteres que estos caracteres al ingresar datos. Las siguientes entradas son legales:
3, 4
Es un error utilizar espacios u otros caracteres en lugar de comas.
3 4 3:4
Otro ejemplo:
scanf("a=d,b=d",amp;a,amp;b) ;
La entrada debe tener la siguiente forma:
a=3, b=4
9. El formato de los caracteres de entrada no cumple con los requisitos. .
Al ingresar caracteres en formato "c", tanto el "carácter de espacio" como el "carácter de escape" se ingresan como caracteres válidos.
scanf("ccc",amp;c1,amp;c2,amp;c3);
Por ejemplo, ingrese a b c
El carácter "a" se envía a c1, el carácter "" se envía a c2, el carácter "a" se envía a c1, el carácter "" se envía a c2. Envíe el carácter "a" a c1, el carácter "" a c2 y el carácter "b" a c3, porque c solo requiere la lectura de un carácter y no es necesario utilizar un espacio como separación entre los dos personajes.
10. Los tipos de datos de entrada y salida no coinciden con los descriptores de formato utilizados.
Por ejemplo, a se define como un número entero y b se define como un número real
a=3; b=4.5;
printf("fd /n", a, b);
No se mostrará ningún mensaje de error al compilar, pero el resultado en tiempo de ejecución será inconsistente con la intención original. Este error requiere atención especial.
11. Intente especificar precisión al ingresar datos.
scanf("7.2f",&a);
Esto es ilegal; no se puede especificar la precisión al ingresar datos.
12. Omita la declaración de interrupción en la declaración de cambio.
Por ejemplo, imprima segmentos percentiles según los niveles de puntuación de las pruebas.
cambiar(calificación)
{ caso 'A': printf("85~100\n");
caso 'B': printf(" 70~84\n");
caso 'C': printf("60~69\n");
caso 'D': printf("lt; 60\ n");
predeterminado: printf("error\n");
Dado que se omite la declaración de interrupción, el caso solo sirve como marcador, no como juicio. Por lo tanto, cuando la calificación se evalúa como A, la función printf ejecuta la segunda, tercera, cuarta y quinta declaración de la función printf después de la primera declaración. La forma correcta de escribirlo es agregar "break;" después de cada rama. Por ejemplo
caso 'A': printf("85~100\n"); break;
13. Ignore los detalles de la declaración while y la declaración do- while.
(1)main()
{int a=0, I
scanf("d", amp; I
);mientras(Ilt;=10)
{a=a I;
I;
}
printf(" d", a);
}
(2)main()
{int a=0, I;
scanf ("d",amp;I);
hacer
{a=a I;
I;
}mientras( Ilt;=10) )
printf("d",a);
}
Puedes ver que cuando el valor de la entrada I es menor que o igual a Cuando 10, ambos obtienen el mismo resultado. Y cuando Igt;10, los dos resultados son diferentes. Porque el ciclo while se juzga primero y luego se ejecuta, mientras que el ciclo do- while se ejecuta primero y luego se juzga. Para números mayores que 10, el bucle while ni siquiera ejecuta el cuerpo del bucle una vez, mientras que la instrucción do- while sí lo hace.
14. Abusar de variables al definir arrays.
int n;
scanf("d", amp; n);
int a[n]; Los corchetes posteriores son expresiones constantes, que pueden contener constantes o constantes simbólicas. En otras palabras, el lenguaje C no permite la definición dinámica del tamaño de la matriz.
15. Al definir una matriz, el "número de elementos" definido se confunde con el valor de subíndice máximo que se puede producir.
main()
{static int a[10]={1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; >
printf("d", a[10]);
}
C señala: La definición de a[10] significa que una matriz tiene 10 elementos . Sus valores de subíndice comienzan desde 0, por lo que el elemento de matriz a [10] no existe.
16. Se agregó operador de dirección donde no debería usarse.
scanf("s",amp;str);
La forma en que el sistema de compilación C maneja los nombres de las matrices es que el nombre de la matriz representa la dirección inicial de la matriz y la entrada Los elementos de la función scanf son un nombre de matriz de caracteres, por lo que no es necesario agregar el operador de dirección amp;. Debe cambiarse a:
scanf("s", str);
17. Se han definido los parámetros formales y las variables locales en la función.
int max(x,y)
int x,y,z;
{z=xgt;y?x:y;
return(z);
}
Los parámetros formales deben definirse fuera del cuerpo de la función, mientras que las variables locales deben definirse dentro de la función. Su contenido debe ser:
int max(x, y)
int x, y
{int z
z; =xgt;y?x:y;
retorno(z);