2016-05-11 8 views
0

Ich möchte eine String-Variable mit'sprintf' und einem zufälligen Namen aus einer Liste erstellen (um ein Bild mit einem solchen Namen zu speichern). Ein Entwurf des Codes ist die folgende:Matlab sprintf falsches Ergebnis mit zufälligen Strings aus der Liste

Names = [{'C'} {'CL'} {'SCL'} {'A'}]; 
nameroulette = ceil(rand(1)*4) 
filename = sprintf('DG_%d.png', Names{1,nameroulette}); 

Aber wenn ich filename überprüfen, was ich erhalte, ist der Text, den ich durch eine der Saiten nicht gefolgt, eingegeben, sondern durch eine Zahl, die ich habe keine Ahnung, wo es darum geht, von. Zum Beispiel, wenn meine nameroulette = 1 dann filename ist DG_67.png, und wenn nameroulette = 4, filename = 'DG_65.png'. Woher kommt diese Nummer und wie kann ich dieses Problem beheben?

+1

Mit 'sprintf' ist der '% d'-Bezeichner für eine ganze Zahl, d. H. Er fügt eine ganze Zahl ein, in der'% d' erscheint. Ich stelle mir vor, dass Sie die [ASCII-Werte] (http://www.asciitable.com/) der Zeichen der Zeichenfolge erhalten ("A" ist "65", also wäre "C" "" 67') Um die Zeichenfolge als Zeichen anstelle von Zahlen einzufügen, verwenden Sie lieber '% s'. Check out [dieser Abschnitt der 'sprintf' Dokumente] (http://www.mathworks.com/help/matlab/ref/sprintf.html#inputarg_formatSpec) – Dan

Antwort

3

Sie müssen nur

filename = sprintf('DG_%d.png', Names{1,nameroulette}); 

zu

filename = sprintf('DG_%s.png', Names{1,nameroulette}); 

Durch die Art und Weise ändern, die Sie bei Randi Befehl einen Blick haben für die Erstellung Zufallszahlen möchten.

+0

Ah ok, es war einfacher als ich dachte. Vielen Dank und auch für den Vorschlag von'andrastample', meine'Namensroulette'-Variable zu ersetzen. – Patapunfate