2010-06-08 6 views
0
#include <iostream> 
using namespace std; 

int main() { 

    short int enterVal; 
    cout << "enter a number to say: " << endl; 
    cin >> enterVal; 
    system("say "%d"") << enterVal; 

    return 0; 
} 

Est ce que j'essaie actuellement. Je veux que l'utilisateur entre un nombre et la fonction de system() le dit fondamentalement. Le code ci-dessus a une erreur qui dit "'d' n'a pas été déclaré dans cette portée". Merci d'avance.Obtenir une entrée dans la fonction system() (Mac)

Répondre

3

Vous devez formater la chaîne manuellement.

#include <iostream> 
#include <sstream> 
using namespace std; 

int main() 
{ 
    short int enterVal; 
    cin >> enterVal; 

    stringstream ss; 
    ss << "say \"" << enterval << "\""; 
    system(ss.str().c_str()); 
} 
+0

Merci, ça marche super! – Alex

0

Vous devez échapper vos guillemets et formater la chaîne. Une autre façon de le faire serait:

#include <iostream> 
#include <stdio.h> 
using namespace std; 

int main() { 
    short int enterVal; 
    char command[128]; 
    cout << "enter a number to say: " << endl; 
    cin >> enterVal; 
    snprintf((char *)&command, 128, "say \"%d\"", enterVal); 
    system(command); 
    return 0; 
} 

Vous devez également savoir que vous devriez éviter programatically système en utilisant() appels comme cela rend votre programme vulnérable aux failles de sécurité.

Si vous êtes juste déconner et ne me dérange pas continuer ensuite par tous les moyens;)

+0

Ouais, ce programme est juste pour le plaisir. :) – Alex

0

Vous pouvez utiliser quelque chose comme ceci:

#include <iostream> 
#include <sstream> 
using namespace std; 

int main() { 

    short int enterVal; 
    cout << "enter a number to say: " << endl; 
    cin >> enterVal; 
    ostringstream buff; 
    buff << "say " << enterVal; 
    system(buff.str().c_str()); 

    return 0; 
} 
Questions connexes