Возврат элемента из Списка в Scala

Проблема в том, что вы должны передать указатель на scanf . Обычно вы передаете массив (который является указателем) или символ-указатель (строка). То, что вы делаете, передает сам символ. У метода нет возможности записать что-либо в символ, потому что он копируется перед вызовом функции.

То, что происходит тогда, - то, что метод интерпретирует неинициализированный символ как адрес и пытается записать в случайное местоположение, которое наиболее вероятно терпит неудачу.

Просто передайте адрес символа:

char message[MAX_LEN];
printf("Enter a message: ");
for (int i = 0; i < MAX_LEN - 1; i++)
    scanf("%c", &message[i]);

for (int i = 0; i < MAX_LEN - 1; i++)
    printf("%c", message[i]);
16
задан 10 September 2008 в 13:15
поделиться

5 ответов

scala> val list = List(("A", "B", 1), ("C", "D", 1), ("E", "F", 1), ("C", "D", 2), ("G", "H", 1))
list: List[(java.lang.String, java.lang.String, Int)] = List((A,B,1), (C,D,1), (E,F,1), (C,D,2), (G,H,1))

scala> list find {e => e._1 == "C" && e._2 == "D"}
res0: Option[(java.lang.String, java.lang.String, Int)] = Some((C,D,1))
13
ответ дан 30 November 2019 в 21:20
поделиться

Как упомянуто в предыдущем комментарии, find, вероятно, самый легкий способ сделать это. Существует на самом деле три различных "линейных поисковых" метода в наборах Scala, каждый возвращающий немного отличающееся значение. Какой, который Вы используете, зависит от того, для чего Вы нуждаетесь в данных. Например, Вам нужен индекс, или Вам просто нужна булевская переменная true / false?

3
ответ дан 30 November 2019 в 21:20
поделиться

Вы могли попытаться использовать , находят . (Обновленное местоположение scala-документа находки)

6
ответ дан 30 November 2019 в 21:20
поделиться

Вы могли также сделать это, которое не требует знания имен полей в классе Tuple2 - это использует сопоставление с образцом вместо этого:

list find { case (x,y,_) => x == "C" && y == "D" }

"находка" хороша, когда Вы знаете, что Вам только нужен тот; если Вы хотите найти все элементы соответствия, Вы могли бы или использовать "фильтр" или эквивалент, сладкий для понимания:

for ( (x,y,z) <- list if x == "C" && y == "D") yield (x,y,z)
1
ответ дан 30 November 2019 в 21:20
поделиться

Если бы Вы изучаете scala, я бросил бы хороший взгляд на черта Seq . Это обеспечивает основание для большой части функционального совершенства scala.

2
ответ дан 30 November 2019 в 21:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: