Effettivamente hai ragione, quel che mi occorre ora è fare un pò di pratica... Dopo essermi documentato un pò ho prodotto questo (sempre "lavorando" sul tuo):

codice:
CODICE C:
#include <stdio.h>

main ()
{
   char nome[100], cognome[100];
   int age;
   scanf("%s", nome);
   scanf("%s", cognome);
   scanf("%d", &age);
   printf("%s\n", nome);
   printf("%s\n", cognome);
   printf("%d\n", age);
}

CODICE JAVA:
import java.awt.BorderLayout;
import java.awt.event.*;
import java.io.*;
import javax.swing.*;

public class TalkWithC extends JPanel implements ActionListener
{
   private JTextField testo;
   private JTextField testo2;
   private JTextField testo3;
   private JLabel lab;
   private JLabel lab2;
   private JLabel lab3;
   private JButton bottone;
   private JTextArea output;
   private JPanel up;

   /** Creates a new instance of TalkWithC */
   public TalkWithC()
   {
      super();
      this.setLayout(new BorderLayout());
      up = new JPanel();
      testo = new JTextField(10);
      testo2 = new JTextField(10);
      testo3 = new JTextField(10);
      lab = new JLabel("Nome");
      lab2 = new JLabel("Cognome");
      lab3 = new JLabel("Eta");
      bottone = new JButton("Test");
      bottone.addActionListener(this);
      output = new JTextArea("Output: \n");
      output.setEditable(false);
      output.setRows(10);
      up.add(lab);
      up.add(testo);
      up.add(lab2);
      up.add(testo2);
      up.add(lab3);
      up.add(testo3);
      up.add(bottone);
      this.add(up, BorderLayout.NORTH);
      this.add(output, BorderLayout.CENTER);
   }

   public void actionPerformed(ActionEvent e)
   {
      Runtime r = Runtime.getRuntime();
      Process p;
      try
      {
         p = r.exec("C:\\Documents and Settings\\Ida\\Desktop\\Nuo\\prova.exe");

         BufferedReader reader=new BufferedReader(new InputStreamReader(p.getInputStream()));
         PrintWriter writer = new PrintWriter(new OutputStreamWriter(p.getOutputStream()));
         writer.write(testo.getText() + "\n");
         writer.write(testo2.getText() + "\n");
         writer.write(testo3.getText() + "\n");
         writer.flush();
         String line;
         while((line = reader.readLine()) != null)
         {
            output.append(line+"\n");
         }
         reader.close();
         int status = p.exitValue();
      } catch(Exception ex)
      {
         ex.printStackTrace();
      }
   }
}
che funziona esattamente come dovrebbe (pur non servendo a nulla...).

Solo due considerazioni:
1) secondo te è corretto acquisire anche l'eta (quindi un valore numerico) con getText (quindi come stringa...)? C'è un modo migliore? Secondo me non è molto corretto, ma poi ho visto (modificando il main.c) che in realtà il valore acquisito viene trattato proprio come un intero, quindi no problemm (almeno credo...)
2) se le 3 TextField le volessi disporre una sotto l'altra e non una dopo l'altra come dovrei fare?

Grazie