 <p>Your function <code>introducir_datos()</code> is declared as follows:</p> <pre><code>void introducir_datos (struct agenda cliente[30]); </code></pre> <p>But in your nested <code>switch</code> statement, you have this line:</p> <pre><code>introducir_datos(cliente); </code></pre> <p>where <code>cliente</code> is declared as <code>char cliente[30]</code>. So instead of providing <code>introducir_datos()</code> with a <code>struct agenda*</code> argument, you are giving it a <code>char*</code> argument.</p> <hr> <h2>Clarification:</h2> <p>The function <code>introducir_datos()</code> expects to be given an array of 30 <code>struct agenda</code> items as its argument.</p> <p>This means that the argument type is <code>struct agenda*</code>, because you are sending a pointer to the first item in the array. (This is just how arrays work in C.)</p> <p>You can't call this function with a <code>char[]</code> array as the argument, because a <code>char[]</code> array consists of <code>char</code> variables. A <code>char</code> doesn't have any <code>nombre</code>, <code>apellido</code>, <code>direccion</code>, <code>edad</code> or <code>telefono</code> members.</p> <p>So your code won't compile because the compiler can't figure out what you're trying to do.</p> <p>Incidentally, although you declare the variable <code>int x;</code> in <code>introducir_datos()</code>, you don't initialize it anywhere, so you need to fix that too.</p>