AIと戦って、あなたの人生のリスク診断 >>

golangの空文字の判定の仕方がわかりません

panic: runtime error: index out of range
そのためこのようなエラーが出てしまいます。解決方法を教えてください

A 回答 (1件)

> golangの空文字の判定の仕方がわかりません



string長をみて0か否かを判断すれば良いと思います。

-------------------

func main() {
s := ""
if len(s) == 0 {
fmt.Println("空文字です")
} else {
fmt.Println("空文字ではありません")
}
}
    • good
    • 1
この回答へのお礼

ありがとうございます、無事改善することができました!

お礼日時:2017/06/08 12:37

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aと関連する良く見られている質問

QC言語のビジュアルスタジオについて ビジュアルスタジオをパソコンでインストールしました。 しかし、ビ

C言語のビジュアルスタジオについて

ビジュアルスタジオをパソコンでインストールしました。
しかし、ビルドができません。
最初に空のソリューションをつくり
つぎに新しい項目を追加し、テキストファイルで追加しましたができません

どうしたら良いですか

Aベストアンサー

内部で動いてるnmakeが実行する内容が何処かに表示、あるいはファイルに出力されていますので、それを見てnmakeの動きを追ってください。
ところで今使ってらっしゃるのはVisualStudioCodeにC/C++の開発環境を設定したものでしょうか

QC言語 型変換のタイミング

C言語 型変換のタイミングについて教えてください。
「型変換は代入のとき行われる」と理解していたのですが、代入の前の計算時も行われるのでしょうか?

char c1=120,c2=10;
int i;
のとき、
i = c1 + c2;
は i= -126 を期待したのですが i = 130 となっていました。

質問1)これは、C言語の仕様でしょうか? それともコンパイラに任されている仕様でしょうか?

関連して、
質問2)期待した計算結果をiに代入するには、
char c3;
c3 = c1 + c2; i=c3;
とする以外に方法ありますか?

質問3)計算途中でオーバーフローする可能性のある計算を確実の行うにはどのように記述したらよいでしょう?
int x0,x1,x2,x3;
x0 = (x1 + x2 + x3) / 3;
x0 = x1 * x2 / x3; (ただしx2 < x3)

よろしくお願いします。

Aベストアンサー

1 については C の仕様です. 計算を行うときに, int 以下の型はすべて int (または unsigned int) に変換したうえで計算されます. したがって
i = c1 + c2;
はあたかも
i = (int)c1 + (int)c2;
と書いたのと同じ計算をします.

2 は
i = (char)(c1+c2);
のように演算結果を強引にキャストすればいい, んじゃないかなと思う.

3 については.... ポータブルにやるなら努力と根性で多倍長演算を実装するしかないんじゃないかなぁ.

あ, あと余談だけど C の仕様では
char は*少なくとも*8ビット
です.

QRubyの超初心者です。「戻り値return」が全く分かりません。「puts」ではなぜダメですか?

Rubyの超初心者です。「戻り値 return」を使う意味が全く分かりません。。「return」の代わりに「puts」ではなぜダメですか?

いい例がすぐに思い浮かばないので、例としてパーセンテージのです。

def percentage(a, b)
if b == 0
  return 0
 end
a * 100 / b
end

Aベストアンサー

要するに質問者さんは
いちいちreturnで返さずに
そのままそこで表示しちゃえばいいのにって言いたいんですよね?

これに関しては
例に出しているような
それで完結するシステムなのであればいいのですが
そうじゃない場合が殆どです

質問者さんが挙げた例だと確かに恩恵が分かりにくいですが
returnというのは処理の終わりを表しているものと考えて
明示的にここで終わってますよと示すためにも必要なものだと
ふんわりと認識していればいいと思います

勉強を進めていくなかで、returnの必要性などもわかってくると思いますよ

QC言語プログラミングにて、arctanのマクローリン展開式を用いた計算

C言語のプログラミングについてです。
関数f(x)=arctan⁡xのマクローリン展開式を用いて、f(x)の値を、展開式のn項目までの計算結果と、n+1項目までの計算結果の相対誤差が10^(-10)以下になるまで(有効桁数10桁を保証するまで)試行して計算し、出力するプログラムを作成するという問題です。
次のように、展開式の項数を10000項と設定してプログラムを作成してみましたが、実行結果が-nan(ind)と出力されてしまい、有効桁数10桁での出力がされません。ソースコードのどの部分に不備があるのでしょうか?
以下ソースコードです。
#include<stdio.h>
#include<math.h>

int main(void) {
int i;
double x, a1, a2, arctan;
x = 0;
a1 = 0;
a2 = 0;
arctan = 0;

printf("f(x)=arctan x のマクローリン展開式よりf(x)の値を求める。\n");
printf("x=");
///数値xをキーボードから入力///
scanf_s("%lf", &x);

///有効桁判別ループ開始///
do {
///前値の受け渡し///
a2 = a1;

///項数の設定(10000項と設定)///
for (i = 1; i <= 10000; i++) {
///arctanのマクローリン展開式///
arctan = pow(-1, i - 1)*pow(x, 2 * i - 1) / (2 * i - 1);
a1 = a1 + arctan;
}

///相対誤差が10^-10以下になったら止める///
} while (fabs(a1 - a2) / a1 <= pow(10, -10));

///最終的な計算結果を出力///
printf("f(x)= %.9e \n", a1);

return 0;
}

C言語のプログラミングについてです。
関数f(x)=arctan⁡xのマクローリン展開式を用いて、f(x)の値を、展開式のn項目までの計算結果と、n+1項目までの計算結果の相対誤差が10^(-10)以下になるまで(有効桁数10桁を保証するまで)試行して計算し、出力するプログラムを作成するという問題です。
次のように、展開式の項数を10000項と設定してプログラムを作成してみましたが、実行結果が-nan(ind)と出力されてしまい、有効桁数10桁での出力がされません。ソースコードのどの部分に不備があるのでしょうか?
以下...続きを読む

Aベストアンサー

No1,No2の方の指摘はもっともですが、
そもそも、このマクローリン展開が成立するのは、負の数を除いて考えれば、0<=x<=1 の範囲です。
上記以外では、成立しません。
入力値を0<=x<=1に限定すれば、正しい結果が導かれています。
printf("f(x)= %.9e \n", a1);
のあとに
a2 = atan(x);
printf("arctan(x)= %.9e \n", a2);
を追加し、確認すればわかります。

Qdivoutの方法?

全くの素人ですので、何を書けば正確に教えていただけるのさえ分かりませんが、可能なら次のような事をお教え戴けませんか。

「秀丸」で作った文を「コマンドプロンプト」をクリックし、「platex (名前)」と入力して
「divファイル」に変換をするのですが、このとき、
「コマンドプロンプト」をクリックすると「C:\Users\(名前)>」と出て、「秀丸で作った文」が「ドキュメント」の中の「私の名前」のついたファイルに入っていないと変換できません。
変換できた「diviout文」もそのファイル内にできますので、
変換する前には、保存しておきたいファイルからコピーして移し、変換できた文は保存したいファイルに移動しなければなりません。

保存しておきたいファイル内の「秀丸文」をそのまま保存したいファイル内で変換しすることはできないのでしょうか?

Aベストアンサー

> 続いて、コマンドプロンプトをクリックすると、「C:・・・>」としか出ません。
> ここを「E:\2 (名前)\3-(名前)」に変更しなければいけないのだと思いますが、
> いかにすれば良いのでしょうか。

「C:」や「E:」はドライブレターといいファイルやフォルダ構造の根本の区別をするものです。
現在C:であるドライブレターをE:に変更するには
コマンドプロンプト上で
E: (エンター)
と入力してください。


以下、大変不躾な内容となりますがご容赦下さい。

いままでのやり取りは、platexやdivoutを使用する以前の、Windowsの基本やコマンドプロンプトの使用方法についてのごく初歩的なものです。
platexやdivoutなどのコマンドプロンプトで実行するアプリケーションを使用するにあたって、これらの知識は持っていて「あたりまえ」の知識です。
その部分の習得を飛ばして、いきなりアプリケーションを実行しようとするには、無理があります。
先の回答にも書きましたが、まず基礎を固めて下さい。入門書でもネット上での解説サイトでもなんでも良いです、探して読んでみて下さい。
そうでないと今後も「たったこれだけの作業」を行うのに1週間という「無駄な時間」を費やすことになります。

私からの回答は今回で終了とさせていただきます。

> 続いて、コマンドプロンプトをクリックすると、「C:・・・>」としか出ません。
> ここを「E:\2 (名前)\3-(名前)」に変更しなければいけないのだと思いますが、
> いかにすれば良いのでしょうか。

「C:」や「E:」はドライブレターといいファイルやフォルダ構造の根本の区別をするものです。
現在C:であるドライブレターをE:に変更するには
コマンドプロンプト上で
E: (エンター)
と入力してください。


以下、大変不躾な内容となりますがご容赦下さい。

いままでのやり取りは、platexやdivoutを使用する以...続きを読む

Qプログラミング初心者です!このエラーの意味があまりよくわからないのですがどういう意味なのでしょうか?

このプログラムのエラーの用語?みたいなやつの意味がよくわからないので教えてください!

Aベストアンサー

すみません、画像が不鮮明で、詳細まではわかりません。

class Class1 {}
でよろしいでしょうか?
文法通りに解釈すれば、これでClass1の定義は終了です。
ここで区切られなければならないならない筈が、なんか続きっぽく書いてある、ということでエラーになっています。

その後に続く { 以降は、Class1の外です。
本当は、この後の部分が Class1の内容ではないでしょうか?
だとすると、Class1直後の{} が不要です。


エラーメッセージは、コンピュータの解釈した内容で表示されます。
本当の原因が、エラーメッセージの通りであるとは限りません。
表示された行より前を確認しましょう


また、エラーメッセージが沢山出てもあわてないことです。
一つ間違いがあると、本来正しい箇所まで間違っていると判断されてしまうことがよくあります。
そんなときは、その一つを治すだけで一気にエラーが無くなります。

QGrepの出力結果を細かく指定したい

https://oshiete.goo.ne.jp/qa/9818180.html
上記質問の続きです。

サクラエディタのGrep機能で一括で12桁の数字を抜き出すことはできたのですが、
上記質問の『例)kansei.txt』の形式で出力ができませんでした。
Grepツールで出力結果を細かく指定して出力できるものはありますか?
Grepの結果に毎回自分で置換を行えば目的のものは得られますが、同様の作業を何度も行う予定なので楽にできる方法があればと思っています。

自分でも調べましたが出力結果について明確に説明されているものは少なく、
Grepと同じようなコマンドプロンプトのfindstrや、PowershellのSelect-Stringも調べましたが
できるのかわからなかったので質問しました。

PCはWindows7です。

Aベストアンサー

N0.3のお礼を拝見しました。
12桁の途中で改行が入るということですよね?
では、以下でどうでしょう

-----ここから
$me = "search.ps1" # 本スクリプトファイル名
$out = "kansei.txt" # 出力ファイル名

Get-ChildItem | %{
$name = $_.Name
if(($name -ne $me) -and ($name -ne $out)){
$s = Get-Content $_
if($s.gettype().Name -eq "Object[]"){$s = $s -join ""}
if($s -match "\d{12}"){
"$($Matches[0]) $($_.FullName)" | Out-File -FilePath $out -Append
}
}
}
----ここまで

QシフトJISのCSVファイルをUFT-8(BOMなし)のCSVに変換したい

素人ですが、職場で必要に迫られ模索中です。
ご教授お願いします。

ユーザ情報.csvというシフトJISのファイルを、同じフォルダで同一名のファイル、ユーザ情報.csv(UFT-8(BOMなし)に変換するバッチファイルを作成したいです。
バッチが不可能であればVBスクリプト?(まったくわからないけど)でも結構です。

最終的にはタスクスケジューラに仕込んで毎日定時に、チェックしてシフトJISであった場合、変換をするという動作が理想ですが、とりあえず変換するバッチが作れないので話になりません(;;

敷居が高いかもしれませんが、ファイルがUTF-8であってもエラーとならないように作れるとチェックして云々は不要と思っています。

よろしくお願いします(><

Aベストアンサー

#4の回答者です。

nkf でも、Wscript でも、UTF-8 BOMなし変換は出来ましたが、

Wscript 側は、かなり面倒です、といっても、書いた本人が言うだけで、コピー&ペーストーするだけの話ですが。

結局、#2さんの言う通りになってしまいましたね。(^^;

>ユーザ情報.csvというシフトJISのファイルを、同じフォルダで同一名のファイル、ユーザ情報.csv(UFT-8(BOMなし)に変換するバッチファイルを作成したいです。

これだけで良いのでは?
-----------------------
Rem to_utf8.bat
@echo off
nkf.exe -w --overwrite %1
echo on
-----------------------SJISで保存すること----
戻すオプションは、 -s です。(sjis) %1の所はファイル名でも可

nkf.exe のありか。
http://www.vector.co.jp/soft/win95/util/se295331.html

》Copyright (C) 1987, FUJITSU LTD. (I.Ichikawa).
》Copyright (C) 1996-2010, The nkf Project.

富士通がクレジットしているとは知りませんでしたね。

#4の回答者です。

nkf でも、Wscript でも、UTF-8 BOMなし変換は出来ましたが、

Wscript 側は、かなり面倒です、といっても、書いた本人が言うだけで、コピー&ペーストーするだけの話ですが。

結局、#2さんの言う通りになってしまいましたね。(^^;

>ユーザ情報.csvというシフトJISのファイルを、同じフォルダで同一名のファイル、ユーザ情報.csv(UFT-8(BOMなし)に変換するバッチファイルを作成したいです。

これだけで良いのでは?
-----------------------
Rem to_utf8.bat
@echo off
nkf.exe -w --ove...続きを読む

QC言語の簡単なプログラムの相談です

プログラミング初心者です。
getcharが使えなくて
困っています。
下記プログラムに"#define putchar(c) putc(c, stdout)"と”#define getchar( ) getc(stdin)”も加えたりしているのですが、結果"。"や"1"などがでてきます。(下はサンプルプログラムです)
どなたか、ご教授よろしくお願いします。





#include <stdio.h>

void main(void);

void main(void)
{
int c;

for (c = 'A'; c <= 'Z'; c++) /* c の値は 'A' から 'Z' まで変化 */
putchar(c); /* 1文字画面に出力 */

printf("\n");

for (c = 'Z'; c >= 'A'; c--) /* c の値は 'Z' から 'A' まで変化 */
putchar(c); /* 1文字画面に出力 */

printf("\n\n");

printf("アルファベットを入力して下さい\n");
printf("eを入力するとループからぬけます\t");

while ((c = getchar( )) != EOF) { /* 文字の入力 */
putchar(c);
if (c == 'e') /* 入力された文字が 'e' なら */
break; /* ループから抜ける */
}
}

プログラミング初心者です。
getcharが使えなくて
困っています。
下記プログラムに"#define putchar(c) putc(c, stdout)"と”#define getchar( ) getc(stdin)”も加えたりしているのですが、結果"。"や"1"などがでてきます。(下はサンプルプログラムです)
どなたか、ご教授よろしくお願いします。





#include <stdio.h>

void main(void);

void main(void)
{
int c;

for (c = 'A'; c <= 'Z'; c++) /* c の値は 'A' から 'Z' まで変化 */
putchar(c); ...続きを読む

Aベストアンサー

#Codeが
https://www.microsoft.com/ja-jp/store/p/code/9nblggh4s3mf
これだとすると

> #Code is an online compiler

ってあるから、最近流行りの paizaとかideoneとかみたいな感じなのではないでしょうか。
だとすると、入力は、通常のオフラインでの実行とは違っていても不思議ではありません。

QC++言語

#include <stdio.h>
int main()
{
int vector[3]={1,2,1};
int sum=0 ;
int i ;
for(i=0;i<3;++i)
sum=sum+vector[i] ;
printf("%d\n",sum) ;
}
〔1〕このプログラム終了時の変数iの値を回答せよ
〔2〕プログラム終了時のvector[2]を求めよ

回答お願いしたいです

Aベストアンサー

(1) 3
iが3より小さい間ループする だから iが3になって終了
(2) 1

じゃないかな?
もう忘れた 覚えてない


人気Q&Aランキング