Red de conocimiento informático - Conocimiento informático - ¿A qué errores comunes debes prestar atención al aprender programación en lenguaje C?

¿A qué errores comunes debes prestar atención al aprender programación en lenguaje C?

Las características más importantes del lenguaje C son: funciones potentes, uso fácil y flexible. Los programas compilados en C no son tan estrictos en cuanto a la verificación de sintaxis como otros lenguajes de alto nivel, lo que deja "espacio para la flexibilidad" para los programadores. Sin embargo, esta flexibilidad trae muchos inconvenientes a la depuración del programa, especialmente para los principiantes que aprenden el lenguaje C. cometen errores que ni siquiera saben dónde se equivocaron. Al mirar el programa erróneo, no sé cómo corregirlo. Al estudiar C, acumulé algunos errores comunes en la programación en C y los escribí para su referencia.

1. Al escribir identificadores, se ignora la diferencia entre letras mayúsculas y minúsculas.

main()

{

int a=5;

printf("d", A);

}

El compilador considera que a y A son dos nombres de variables diferentes y muestra un mensaje de error. C considera que las letras mayúsculas y minúsculas son dos caracteres diferentes. Por convención, los nombres de las constantes simbólicas se escriben en mayúsculas y los nombres de las variables se escriben en minúsculas para aumentar la legibilidad.

2. Ignorar el tipo de variable y realizar una operación ilegal.

main()

{

flotante a, b;

printf("d", ab);

}

Es una operación de resto para obtener el resto entero de a/b. Las variables enteras a y b pueden realizar operaciones de resto, mientras que las variables reales no pueden realizar operaciones de "resto".

3. Confundir constantes de caracteres con constantes de cadena.

char c;

c="a";

Aquí se confunden las constantes de caracteres y las constantes de cadena. Las constantes de caracteres se representan mediante un par de comillas simples. Una constante de cadena es una secuencia de caracteres entre comillas dobles. C estipula que "\" se usa como marca final de una cadena, que el sistema agrega automáticamente, por lo que la cadena "a" en realidad contiene dos caracteres: 'a' y '\', y se asigna a un carácter. variable Eso no es posible.

4. Ignora la diferencia entre "=" y "==".

En muchos lenguajes de alto nivel, el símbolo "=" se utiliza como operador relacional "igual". Por ejemplo, puedes escribir en un programa BÁSICO

si (a=3) entonces...

Pero en lenguaje C, "=" es un operador de asignación y "== " es un operador relacional . Por ejemplo:

if (a==3) a=b;

El primero es comparar si a es igual a 3 y el segundo significa si a es igual a 3. , cambie el valor de b asignado a a. Los principiantes suelen cometer este tipo de errores debido a los hábitos.

5. Olvidé agregar un punto y coma.

El punto y coma es una parte indispensable de la declaración C y debe haber un punto y coma 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", por lo que cambió la siguiente línea "b =2" también forma parte de la línea anterior de declaraciones, lo que provocará un error de sintaxis. Al corregir errores, a veces, si no se encuentra ningún error en la línea donde se señaló el error, es necesario verificar si falta un punto y coma en la línea anterior.

{ 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 ignorar (esto es diferente de PASCAL).

6. Añade más punto y coma.

Para una declaración compuesta, como:

{ z=x y

t=z/100; f ", t);

};

No se debe agregar un punto y coma después de las llaves de una declaración compuesta, de lo contrario será superfluo.

Otro ejemplo:

if (a3==0);

I;

Esto es si 3 divide a, entonces yo Añade 1.

Sin embargo, dado que hay un punto y coma adicional después de if (a3 == 0), la declaración if termina aquí y el programa ejecutará la declaración I. Independientemente de si 3 divide a, automáticamente aumentaré en 1.

Otro ejemplo:

for (I=0;Ilt;5;I);

{scanf("d",amp;x);lt ;brgt; printf("d",x);}

La intención original es ingresar 5 números uno tras otro y luego generarlos después de ingresar cada número. Dado que se agrega un punto y coma adicional después de (), el cuerpo del bucle se convierte en una declaración vacía. En este momento, 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 la función Scanf es almacenar los valores de ayb según las direcciones de ayb en la memoria. "&a" se refiere a la dirección de a en la memoria.

8. El método de ingreso de datos no cumple con los requisitos. ①scanf("dd",amp;a,amp;b);

Al ingresar, las comas no se pueden usar como separador entre dos datos. Por ejemplo, la siguiente entrada es ilegal:

3, 4

Al ingresar datos, separe uno o más espacios entre los dos datos. También puede usar la tecla Enter y la tecla tab.

②scanf("d, d", amp; a, amp; b);

C estipula: Si hay otras instrucciones de formato en la cadena, caracteres, debe ingresar los mismos caracteres que estos al ingresar datos. La siguiente entrada es legal:

3, 4

Es incorrecto utilizar espacios u otros caracteres en lugar de comas en este momento.

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 coincide con los requisitos. .

Al ingresar caracteres en formato "c", tanto los "caracteres de espacio" como los "caracteres de escape" se ingresan como caracteres válidos.

scanf("ccc", amp; c1, amp; c2, amp; c3

Si ingresas a b c

El carácter "a" es enviado a c1, el carácter " " se envía a c2 y el carácter "b" se envía a c3, porque c solo requiere la lectura de un carácter y no es necesario utilizar un espacio como intervalo entre los dos caracteres. .

10. Los tipos de datos de entrada y salida son inconsistentes con el especificador de formato utilizado.

Por ejemplo, a se ha definido como tipo entero y b se ha definido como tipo real

a=3; b=4.5;

printf( "fd\n" , a, b);

No se mostrará ningún mensaje de error durante la compilación, pero el resultado de la ejecución será inconsistente con la intención original. Este tipo de error requiere especial atención.

11. Al ingresar datos, intente especificar la precisión.

scanf("7.2f", amp; a);

Esto es ilegal y no se puede especificar la precisión al ingresar datos.

12. Falta la declaración de interrupción en la declaración de cambio.

Por ejemplo: imprima los segmentos de porcentaje según el nivel de puntuación del examen.

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");

Debido a la omisión de la declaración break, el caso solo sirve como etiqueta y no juega un papel papel de juicio. Por lo tanto, cuando el valor de calificación es A, la función printf ejecuta la segunda, tercera, cuarta y quinta declaración de la función printf después de ejecutar 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 la diferencia en los detalles entre las declaraciones while y do- while.

(1)main()

{int a=0, I; brgt; scanf ("d", y lt; ; = 10)lt; brgt; {a=a I;lt; brgt; I; brgt; ; lt; brgt; {a=a I;lt;brgt; I;lt;brgt;}mientras(Ilt;=10); /p>

printf("d", a);

}

Como puede ver, cuando el valor de la entrada I es menor o igual a 10, el dos resultados son iguales. Pero 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 no ejecuta el cuerpo del bucle una vez, mientras que la instrucción do- while ejecuta el cuerpo del bucle una vez.

14. Mal uso de variables al definir arrays.

int n;

scanf("d", amp; n);

int a[n]; Lo que está entre corchetes es una expresión constante, que puede incluir constantes y constantes simbólicas. Es decir, 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 utilizar.

main()

{static int a[10]={1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; >

printf("d", a[10]);

}

El lenguaje C estipula: use un [10] al definir, lo que indica que una matriz tiene 10 elementos. Su valor de subíndice comienza desde 0, por lo que el elemento de matriz a[10] no existe.

16. Al inicializar la matriz, no se utiliza almacenamiento estático.

int a[3]={0, 1, 2};

Es incorrecto inicializar la matriz de esta manera. El lenguaje C estipula que solo se pueden inicializar matrices de almacenamiento estático (estático) y matrices de almacenamiento externo (exterm). Debe cambiarse a:

static int a[3]={0, 1, 2};

17. Se agrega el operador de dirección amp; no se agregará el símbolo.

scanf("s", amp; str);

El sistema de compilación en lenguaje C procesa el nombre de la matriz de la siguiente manera: el nombre de la matriz representa la dirección inicial de la matriz, y en la función scanf El elemento de entrada es un nombre de matriz de caracteres y no es necesario agregar el carácter de dirección amp;. Debe cambiarse a:

scanf("s", str);

18. Los parámetros formales y las variables locales en la función se definen al mismo tiempo.

int max(x,y)

int x,y,z;

{z=xgt;y?x:y;lt;brgt; return(z);lt;brgt;  }

Los parámetros formales deben definirse fuera del cuerpo de la función, mientras que las variables locales deben definirse dentro del cuerpo de la función. Debe cambiarse a:

int max(x, y)

int x, y

{int z=xgt; y ?x:y;lt;brgt; return(z);lt;brgt; }