• 締切済み

プログラミングについて

SmallBasicでプログラミングの勉強をしています。最初につまづいているので教えてください。 message = "" TextWindow.Write("名前を一人ずつ入力してください") TextWindow.Write("たじま") TextWindow.Write("はらだ") TextWindow.Write("なかじょう") TextWindow.WriteLine(("全員入力したらピリオドを入力してください")) name = TextWindow.Read() While name <> "." message = message + name + "さん, " name = TextWindow.Read() EndWhile message = message + "こんにちは!" TextWindow.WriteLine(message) これは途中ですが、結果が回答と違います。 【解答】 名前を一人ずつ入力してください(全員入力したらピリオドを入力してください) たじま はらだ なかじょう . たじまさん,はらださん,なかじょうさん,こんにちは! 入力の結果 名前を一人ずつ入力してくださいたじまはらだなかじょう全員入力したらピリオドを入力してください と、なります。解答結果にするにはどのように入力すればよいですか? お願いします。

みんなの回答

  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.2

PCからの出力> 名前を一人ずつ入力してください(全員入力したらピリオドを入力してください) あなたが入力< たじま (+Enter) あなたが入力< はらだ (+Enter) あなたが入力< なかじょう (+Enter) あなたが入力< . (+Enter) PCからの出力> たじまさん,はらださん,なかじょうさん,こんにちは! ってことじゃないですか? > TextWindow.Write("たじま") > TextWindow.Write("はらだ") > TextWindow.Write("なかじょう") はPCから出力する必要はありません。 「あなたが入力」の通りに入力すれば解答例のようになるし、別な名前を入れれば、最後の「PCからの出力> たじまさん,はらださん,なかじょうさん,こんにちは!」もその名前に変わります。

noname#159582
noname#159582
回答No.1

SmallBasicはやったことが無いのですが、一般的なアドバイスします。 (1)文字列の順番は出力した順番になります (2)("...")と"(...)"は意味が異なります (3).Writeと.WriteLineの違いを認識して下さい 訂正例) TextWindow.Write("名前を一人ずつ入力してください") TextWindow.WriteLine("(全員入力したらピリオドを入力してください)") TextWindow.WriteLine("たじま") TextWindow.WriteLine("はらだ") TextWindow.WriteLine("なかじょう")

minamiizu
質問者

補足

早速教えていただいてありがとうございます。これは「最初からきちんと学びたい人のプログラミングの入門書」という本を購入して勉強をしています。 (2)は私の入力ミスでした。しかし、WriteLineと本では教えておらずWriteだけとなっております。 WriteLineに直して記入しましたが、結果が"さん"付けになっておりません。 できれば全体の名前の記入の仕方を教えていただければと思います。

関連するQ&A

  • プログラミングについて

    プログラミングについて Microsoft small basicで、例えば、星座を入力してもらって、 その結果が、かに座なら「ラッキーカラーは黒」、 しし座なら「ラッキーカラーは赤」、それ以外なら「ラッキーカラーは青」 と出力されるプログラムを書いたら、 textwindow.WriteLine("星座を入力して下さい") seiza=TextWindow.Read() seiza1="かに座" seiza2="しし座" If Text.IsSubText(seiza, seiza1)Then TextWindow.WriteLine("ラッキーカラーは黒") elseif Text.IsSubText(seiza, seiza2)then TextWindow.WriteLine("ラッキーカラーは赤") Else TextWindow.WriteLine("ラッキーカラーは青") EndIf こんな感じだと思うのですが、 これを、かに座かうお座なら「ラッキーカラーは黒」、 しし座かさそり座かいて座なら「ラッキーカラーは赤」の用に、 複数の条件を指定するにはどうすればいいのでしょうか? 当方、昨日よりプログラミングを独学していまして、 初歩的な質問だとは思いますが、回答よろしくお願いします。

  • C言語でチャットプログラミングを・・・

    C言語(unix環境)でチャットプログラミングを作りたいのですが、まずは、TCP/IPによるマルチクライアントで簡単なメッセージのやりとりができるプログラムを練習として作りたいと考えています。 そこでサーバにクライアントからメッセージが届いた時点で全クライアントにメッセージを送信(write)し、逐次更新されるようにしたいのですが、クライアント側で常にread関数を呼び出すのは非常に不格好だし、メッセージを入力するといった他の処理ができなくなると思うのです。 何か方法はありますでしょうか? なにぶんネットワークプログラミングは始めたばかりですので初心者向けの解説をお願いします。

  • 検索がうまくいきません(pascal)

    名前と電話番号を外部環境'teldata'に出力し、検索したい人の名前を入力し対応する電話番号を答えるプログラムを作りました(登録されてなければ「該当者なし」と出力、'end'が入力されるまで続く)。 コンパイルは通ったのですが検索結果はおかしなものになってしまいました。 どこが間違っているのか、ご教授ください。 ソース) program kadai(input,output,meibo); type KojinData = record name : packed array[1..20] of char; tel : packed array[1..15] of char end; var meibo : file of KojinData; x : KojinData; begin rewrite( meibo,'teldata' ); write('名前:'); readln(x.name); repeat write('電話番号:'); readln( x.tel ); write( meibo,x); write('名前:'); readln( x.name ) until (x.name='end'); reset( meibo,'teldata' ); write('名前:'); readln(x.name); repeat while not eof( meibo ) do begin read( meibo,x ) end; if x.name = x.name then begin writeln('電話番号:',x.tel) end else begin writeln('該当者なし') end until (x.name='end') end. 結果) 名前:a 電話番号:1 名前:b 電話番号:2 名前:c 電話番号:3 名前:end 名前:a 電話番号:3 電話番号:3 電話番号:3 電話番号:3 {強制終了するまで続く}

  • プログラミングについて。

    0 … 標準入力 (write では使われない) 1 … 標準出力 2 … 標準エラー出力 3~ … ファイル(openの返り値) (openによって、この数字とファイルとが関連付けられます。 #というかopenは空いている番号とファイルを関連付けて #その値を返す関数です) 括弧の所が分かりません。教えていただけないでしょうか?すみません。 以下のURLの続きです。 https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q12246178492 は、open で指定したファイルと、番号が対応する、っていうことです。 例えば、 int fd; fd = open("filename", O_RDONLY); としたときに、fd が 100 だったとしたら、今後、100番は、この filename というファイルを参照するための番号として使える、ということです。 例えば、read なら、 read(100, ...) のようにファイルに対応している番号100を書くことで、そのファイルからの読み取りができる、ということです。は、最初の例は、ファイルネーム100番からずっとそのfilenameというファイルを参照するという事でしょうか?で、次の例は、ファイル100を読み取るということでしょうか?教えていただけると助かります。すみません。という事で合っていますでしょうか?教えていただけると助かります。すみません。

  • [C#]順序通りに実行されない

    次のC#のプログラムについて質問です。 //ここから using System; class Myclass { double[] point; string[] name; int nMax; public double this[string str] { get { for (int i = 0; i < nMax; i++) { if (str == name[i]) return point[i]; } return -1.0; } set { for (int i = 0; i < nMax; i++) { if (str == name[i]) { point[i] = value; break; } } } } public Myclass(int n) { point = new double[n]; name = new string[n]; nMax = n; setname(); } void setname() { for(int i=0;i<nMax;i++) { Console.Write("生徒名[{0}] = ",i); name[i] = Console.ReadLine(); } } } class ch08ex02 { public static void Main() { Console.WriteLine( "まずはじめに生徒数と、全員の名前入力が必要です"); Console.Write("生徒数--- "); string strn = Console.ReadLine(); Myclass mc = new Myclass(int.Parse(strn)); string ans, strp; Console.WriteLine("X入力で終了"); while (true) { Console.Write("点数を入力したい生徒名--- "); if ((ans = Console.ReadLine()) == "X") break; Console.Write("点数--- "); strp = Console.ReadLine(); mc[ans] = double.Parse(strp); } Console.WriteLine(); Console.WriteLine("X入力で終了"); while (true) { Console.Write("点数を知りたい生徒名--- "); ans = Console.ReadLine(); if (ans == "X") break; Console.WriteLine("{0}くんの点数は{1}点です", ans, mc[ans]); } } } //ここまで これはプロパティを使って生徒の点数を配列に格納したり参照したりするプログラムですが、実行するとMain()の    Console.Write("生徒数--- "); string strn = Console.ReadLine(); Myclass mc = new Myclass(int.Parse(strn)); string ans, strp; Console.WriteLine("X入力で終了");    while (true) { Console.Write("点数を入力したい生徒名--- "); if ((ans = Console.ReadLine()) == "X") break; Console.Write("点数--- "); strp = Console.ReadLine(); mc[ans] = double.Parse(strp); } の部分が思い通りに動いてくれません。 まずコンソールに「生徒数--- 」と表示されConsole.ReadLine()で数字を受け取り、その数からMyclassのインスタンスを作成し、「X入力で終了」と表示した後whileループで生徒名と点数の入力を受け付けるはずです。 しかしこれを実行すると「X入力で終了」と表示する前にwhileループに入り、ループを抜けた後「X入力で終了」と表示されます。 つまり順番が逆になっているわけです。 なぜこうなるかわかりません。 誰か教えてください、お願いします。

  • C#で、あるクラスのメンバーすべての値を出力したい

    C#の勉強したて(Cの知識もへっぽこ)なので、以下のことをしたいのに、 さっぱりやり方が分かりません。 教えて君みたいな質問ですが、心の大きい方、どうぞ教えてくださいませ。 ★やりたいこと 他クラスのメンバー全部に値を入力し、かつそれを出力したい。 なお、他クラスのメンバーは数十個あるので、一つづつ代入&出力ではなく、 ループ文を使ったようなもので行えないかと模索中。 ★例 //住所録ファイルの内容をコンソール出力するプログラム。 using System; class Data_Format {   public string name;   public string address;   public string age; } class App{   public static void Read_Data(ref Data_Format obj){     obj.name = 略) テキストファイルの1行目から読込め     obj.address = 略) テキストファイルの2行目から読込め     obj.age = 略) テキストファイルの3行目から読込め   }   public static void Main() {     Data_Format ob = new Data_Format();     App.Read_Data(ref ob);     Console.WriteLine(ob.name);     Console.WriteLine(ob.adress);      Console.WriteLine(ob.age);   } } この例では Mainメソッドで、 3個のオブジェクト(ob.name, ob.address, ob.age)の内容を出力させるのに、 Conosole.WriteLineの文を3個書いています。 さらに、Read_Dataメソッドで 3個のオブジェクト(ob.name, ob.address, ob.age)の値を入力するのに、 3行費やしています。 (↑ファイルの1行目から順番に読ませるので、効率化できる??) しかし、実際に作りたいプログラムはメンバーが数十個あるので、 ループ文等を使えれば、効率よくなるのかな悪それでもいいのですが、 もっといい方があればご教授下さい。

  • Win2000でのダイアルアップ接続設定ウィザード

    Win2000のPCでダイアルアップ接続の設定を行おうとしています。 インターネット接続ウィザードを使い各種設定を行い、 「ステップ3:コンピュータの設定」までたどりつき、 「接続名」に例えば「@nifty接続」と入力しても、 「@nifty接続は有効な名前ではありません。エントリ名は、空白でない文字を最低1つ含む必要があります。また冒頭にピリオドをつけることができません。他の名前を選んでください」 というメッセージが出て、先に進めません。 他の名前を入力しても同じ結果となってしまいます。 どなたか原因と対策をお教えいただけると助かります。 よろしくお願いいたします。

  • VBScriptsについてご教授下さい。

    VBScriptsについてご教授下さい。 やりたいことは、 scripts1で名前を入力して、確認メッセージを表示させ、 scripts2を起動し、scripts1で入力した名前を出力させたいのですが、 scripts1の確認メッセージ出力後エラーが出ます。 恐らくとても低レベルな事だと思われるので、 ネット上でも解決方法が見つけられませんでした。 どこを改良すれば、要望通りいくかご教授下さい。 #scripts1 Name = InputBox("名前入力。","名前入力") MsgBox Name objWShell.Run "C:\scripts\script2.vbs" WScript.Quit() #scripts2 MsgBox "script1で入力した名前:Name

  • 同じコードを何回も繰り返しているので、簡潔にしたい

    「1.htm」のフォームで入力された値を、 「2.asp」で出力するASPを作成しました。 以下のようなコードになってしまいました。 動作はするのですが、 もう少し簡潔にならないかと考えています。 どうかご教授ください。 宜しくお願いします。 ****1.htm*** <input name="test1" type="text"> <INPUT type="radio" name="test1_1" value="y">あり  <INPUT type="radio" name="test1_1" value="n">なし <input name="test2" type="text"> <INPUT type="radio" name="test2_2" value="y">あり  <INPUT type="radio" name="test2_2" value="n">なし … <input name="test5" type="text"> <INPUT type="radio" name="test5_5" value="y">あり  <INPUT type="radio" name="test5_5" value="n">なし ***2.asp***** test1で値が入力されていたらその値をもとにクエリを組んで、 結果を出力しています。 If Not test1 = "" Then Set db=Server.CreateObject("ADODB.Connection") db.Provider = "Microsoft.Jet.OLEDB.4.0" db.ConnectionString = Server.MapPath("test.mdb") db.open Set rs = db.Execute("SELECT * FROM テーブル1 WHERE ((テーブル2.番号)='" & test1 & "')") ObjTS.WriteLine " & rs.Fields.Item("名前") & " If test1_1 = "y" then ObjTS.WriteLine "メッセージ" End If rs.Close db.Close Set db = Nothing End If If Not test2 = "" Then Set db=Server.CreateObject("ADODB.Connection") db.Provider = "Microsoft.Jet.OLEDB.4.0" db.ConnectionString = Server.MapPath("test.mdb") db.open Set rs = db.Execute("SELECT * FROM テーブル1 WHERE ((テーブル2.番号)='" & test2 & "')") ObjTS.WriteLine " & rs.Fields.Item("名前") & " If test2_2 = "y" then ObjTS.WriteLine "メッセージ" End If rs.Close db.Close Set db = Nothing End If …… If Not test5 = "" Then Set db=Server.CreateObject("ADODB.Connection") db.Provider = "Microsoft.Jet.OLEDB.4.0" db.ConnectionString = Server.MapPath("test.mdb") db.open Set rs = db.Execute("SELECT * FROM テーブル1 WHERE ((テーブル2.番号)='" & test5 & "')") ObjTS.WriteLine " & rs.Fields.Item("名前") & " If test5_5 = "y" then ObjTS.WriteLine "メッセージ" End If rs.Close db.Close Set db = Nothing End If

  • C言語でファイルを表示させるプログラミングがわかりません。

    以下のC言語のプログラミングがわかりません。どなたかわかりませんか? ファイルdata.txtに人の名前と生年月日を追記し、ファイルをいったん閉じてから開きなおし、ファイルの内容を表示するプログラムを作成する。 同じプログラムを2度実行すると、前に入力したときの人の名前と生年月日も表示されるようになる。 複数人のデータが連続して入力できるように工夫する。形式は以下のようにスペースとコンマで区切って記録する。(文字列の後ろにはスペースを入れるように注意する。) Taro , 1985, 6,23 Jiro ,1983, 7,31 そして、 半角の名前と 生年月日(三つの数字)がコンマで区切って各人に対してファイルに記録できるようにする。 一人分のデータが一行で記録されている。 1回の実行で,複数人のデータを連続して入力できる。 全然わからなくて以下のようなことしかできませんでした。 #include<stdio.h> int main() { char name[20]; int i,j,k; scanf("%s ,%d, %d, %d", name, &i, &j, &k); printf("%s ,%d, %d, %d", name, i, j, k); }