como hago si quiero que el usuario por ejemplo ingrese su nombre, y yo crear un archivo con ese nombre, pero con una extension , por ejemplo dat, la extension NO la da el usuario.
No deberías combinar los lenguajes, si utilizas C++ puedes utilizar un objeto de la clase string (y para el caso sus clases para el manejo de archivos).Tal como esta el pequeño fragmento que mencionas primero pides el nombre y después agregas la extensión mediante la función strcat (prototipo en <cstring>), mas o menos así:
Código
cout << "Digite su nombre: "; cin >> nombre; // Se agrega la extension al final de la cadena strcat(nombre, ".dat") archivo1 = fopen(nombre, "a+"); // ...
Un saludo