質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Rust

Rustは、MoFoが支援するプログラミング言語。高速性を維持しつつも、メモリ管理を安全に行うことが可能な言語です。同じコンパイル言語であるC言語やC++では困難だったマルチスレッドを実装しやすく、並行性という点においても優れています。

Q&A

解決済

2回答

1987閲覧

【AtCoder】proconioが使えなくて悲しいです

yui-chan

総合スコア18

Rust

Rustは、MoFoが支援するプログラミング言語。高速性を維持しつつも、メモリ管理を安全に行うことが可能な言語です。同じコンパイル言語であるC言語やC++では困難だったマルチスレッドを実装しやすく、並行性という点においても優れています。

0グッド

0クリップ

投稿2021/12/09 02:55

編集2021/12/10 09:56

試したこと

https://teratail.com/questions/324307
このサイトを参考にして環境を構築していきました。

実行環境

MacOS
VSCode

階層

cargo new helloで作成されました。

. └── hello ├── Cargo.toml └── src └── main.rs

ファイルの中身

toml

1[package] 2name = "hello" 3version = "0.1.0" 4edition = "2021" 5 6# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html 7 8[dependencies] 9proconio = "0.4"

rust

1use proconio::input; 2fn main() { 3 input!{ 4 a:i32, 5 b:i32, 6 } 7 println!("a = {},b = {}",a,b); 8}

エラーコード

code runner で実行しています。

nolun atcoder (work) % cd "/Users/nolun/atcoder/hello/src/" && rustc main.rs && "/Users/nolun/atcoder/hello/src/"main error[E0432]: unresolved import `proconio` --> main.rs:1:5 | 1 | use proconio::input; | ^^^^^^^^ maybe a missing crate `proconio`? error: cannot determine resolution for the macro `input` --> main.rs:3:5 | 3 | input!{ | ^^^^^ | = note: import resolution is stuck, try simplifying macro imports error[E0425]: cannot find value `a` in this scope --> main.rs:7:30 | 7 | println!("a = {},b = {}",a,b); | ^ not found in this scope error[E0425]: cannot find value `b` in this scope --> main.rs:7:32 | 7 | println!("a = {},b = {}",a,b); | ^ not found in this scope error: aborting due to 4 previous errors Some errors have detailed explanations: E0425, E0432. For more information about an error, try `rustc --explain E0425`.

Rustどうしても使いたいです
どなたかご共助願いたいです????
よろしくおねがいします!!

【補足】

イメージ説明

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

tatsuya6502さんの説明の通りで、また実際にrustcの代わりにcargoを使うようにするにはこのような設定をすればよいです。

json

1 "code-runner.executorMap": { 2 "rust": "cd $dir && cargo run" 3 },

src/bin/*.rsなどにちゃんと対応しようとするなら工夫が必要かと思います。試しに書いてみたらこのようになりました。

json

1 "code-runner.executorMap": { 2 "rust": "cd $dir && md=\"$(cargo metadata --format-version 1)\" && target=\"$(jq --arg src_path $dir$fileName '.resolve.root as $root | .packages[] | select(.id == $root) | .targets | map(select(.src_path == $src_path))' <<<\"$md\")\" && [ \"$(jq length <<<\"$target\")\" == 1 ] && cargo run --\"$(jq -r '.[0].kind[0]' <<<\"$target\")\" \"$(jq -r '.[0].name' <<<\"$target\")\"" 3 },

(元は以下のBashスクリプトです。)

bash

1# shellcheck disable=SC2086 2cd $dir && 3 md="$(cargo metadata --format-version 1)" && 4 target="$(jq --arg src_path $dir$fileName '.resolve.root as $root | .packages[] | select(.id == $root) | .targets | map(select(.src_path == $src_path))' <<<"$md")" && 5 [ "$(jq length <<<"$target")" == 1 ] && 6 cargo run --"$(jq -r '.[0].kind[0]' <<<"$target")" "$(jq -r '.[0].name' <<<"$target")"

ただ基本的にmatklad.rust-analyzerを使う方がよいと思います。

投稿2021/12/09 17:03

qryxip

総合スコア86

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yui-chan

2021/12/10 09:53

qryxipさん回答ありがとうございます〜!!☆ 実行したんですけど、 Finished dev [unoptimized + debuginfo] target(s) in 0.00s Running `/Users/nolun/atcoder/hello/target/debug/hello` というのが出力されていて、 println!("a = {},b = {}",a,b); の結果が見れないです。。。 あと、rust-analyzerを使ってRunをクリックしても同じようにRunnningが表示されるだけで結果が出力されません???? あと、補足に載せたようにくるくるくるくるくるくるするのがずっと表示されるのですがこれもなんかおかしいんですかね、?
guest

0

ベストアンサー

code runner で実行しています。

console

1% cd "/Users/nolun/atcoder/hello/src/" && rustc main.rs && "/Users/nolun/atcoder/hello/src/"main

実行するときのコマンドが間違っているためにエラーが出ています。rustc main.rs && ... /main ではなくcargo runまたはcargo run --releaseで実行してください。

試しにVS Codeのターミナルから以下のコマンドを入力してみてください。

console

1$ cd ~/atcoder/hello 2$ cargo run

これならエラーなく実行できるはずです。

VS CodeでRustのコードを書くときは、rust-analyzer拡張機能を使うのがおすすめです。

使い方は以下のとおりです。

  1. rust-analyzer拡張機能をインストールします
  2. VS Codeでatcoder/helloフォルダーを開きます
  3. src/main.rsを開くと、rust-analyzer本体のダウンロードが始まります
  4. ダウンロード後、数十秒待つとfn main() {の上に小さな字で"Run"と表示されます
  5. "Run"をクリックすると実行できます。

追記(2021年12月10日)

コメント欄より

回答ありがとうございます!!☺️

確かに挙動が変わったんですけど、、
println!("a = {},b = {}",a,b);
の結果がどこにも出てきません

abにあたる2つの数字を入力してみてください。また、コメントに返信したときは忘れていたのですが、proconioのinput!--releaseを付けるかどうかで少し動きが変わるのでした。

まずは--releaseなしで実行してみてください。こんな感じになります。

console

1% cargo run 2 Compiling lazy_static v1.4.0 3 Compiling proconio v0.4.3 4 Compiling hello v0.1.0 (... /hello) 5 Finished dev [unoptimized + debuginfo] target(s) in 1.04s 6 Running `target/debug/hello` 7100 200      # ← 左のように入力してからリターンキーを押す 8a = 100,b = 200

--releaseありの場合はControlキーとDキーを同時に押すことで、入力を終わらせる必要があります。(これをEnd Of File、略してEOFと呼びます)

console

1% cargo run --release 2 Finished release [optimized] target(s) in 0.02s 3 Running `target/release/hello` 4100 200 # ← 左のように入力してからリターンキーを押し、 5 # さらにControlキーとDキーを同時に押す 6a = 100,b = 200

投稿2021/12/09 14:37

編集2021/12/10 11:22
tatsuya6502

総合スコア2046

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yui-chan

2021/12/10 05:48

回答ありがとうございます!!☺️ 確かに挙動が変わったんですけど、、 println!("a = {},b = {}",a,b); の結果がどこにも出てきません nolun hello (work) % cargo run Finished dev [unoptimized + debuginfo] target(s) in 0.04s Running `target/debug/hello` ^C nolun hello (work) % cargo run --release Compiling lazy_static v1.4.0 Compiling proconio v0.4.3 Compiling hello v0.1.0 (/Users/nolun/atcoder/hello) Finished release [optimized] target(s) in 5.71s Running `target/release/hello` どうすればいいでしょうか????
tatsuya6502

2021/12/10 10:09

aとbの2つの数字を入力しないと先に進まないですね。 「100 200」のように2つの数字をスペースで区切って入力し、リターンキーを押してください。
tatsuya6502

2021/12/10 11:23

--release付きで実行するときに注意することがあったのを思い出しました。回答の方に追記しましたので、そちらを見てみてください。
yui-chan

2021/12/11 04:04

実行できました! というか、初歩的なことに気づけなかった私がおはずかしいです???? 懇切丁寧な説明ほんとにありがとうございました???? 
tatsuya6502

2021/12/11 04:49

解決してよかったです!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問