Вы можете использовать fgets()
:
#include
int main() {
int n, i = 0;
char val;
char a[20];
printf("\nEnter the value : ");
fgets(a, 20, stdin);
printf("\nEnter the value to be searched : ");
scanf("%c", &val);
int count = 0;
for (i = 0; i < 20; i++) {
if (a[i] == val) {
printf("\n%c found at location %d", val, i);
count++;
}
}
printf("\nTotal occurance of %c is %d", val, count);
return 0;
}
или очистить stdin
:
#include
void clearstdin(void) {
int c;
while ((c = fgetc(stdin)) != EOF && c != '\n');
}
int main() {
int n, i = 0;
char val;
char a[20];
printf("\nEnter the value : ");
scanf("%s",a);
clearstdin();
printf("\nEnter the value to be searched : ");
scanf("%c", &val);
int count = 0;
for (i = 0; i < 20; i++) {
if (a[i] == val) {
printf("\n%c found at location %d", val, i);
count++;
}
}
printf("\nTotal occurance of %c is %d", val, count);
return 0;
}
Также см. C: Несколько scanf, когда я вхожу в значении для одного scanf он пропускает второй scanf
Я имел хороший успех с помощью Mockito.
, Когда я пытался узнать о JMock и EasyMock, я нашел, что кривая обучения была немного крута (хотя, возможно, это - просто я).
мне нравится Mockito из-за его простого и чистого синтаксиса, который я смог схватить довольно быстро. Минимальный синтаксис разработан для поддержки общих падежей очень хорошо, хотя несколько раз я должен был сделать что-то более сложное, я нашел то, что я хотел, поддерживался и легок схватить.
Вот (сокращенный) пример от домашней страницы Mockito:
import static org.mockito.Mockito.*;
List mockedList = mock(List.class);
mockedList.clear();
verify(mockedList).clear();
Это не становится намного более простым, чем это.
единственная главная оборотная сторона, о которой я могу думать, - то, что это не будет дразнить статические методы.
Я начал использовать насмешки через JMock, но в конечном счете перешел для использования EasyMock. EasyMock был просто, что, - легче - и обеспечил синтаксис, который чувствовал себя более естественным. Я не переключился с тех пор.
Для чего-то немного различного Вы могли использовать JRuby и Мокко , которые объединены в JtestR к тестам записи на Ваш код Java в выразительном и сжатом Ruby. Существуют некоторые полезные примеры насмешки с JtestR здесь . Одно преимущество этого подхода состоит в том, что насмешка реальных классов очень проста.
Mockito также предоставляет возможность блокирования методов, соответствуя аргументам (как anyInt () и anyString ()), проверяя количество вызовов (времена (3), atLeastOnce (), никогда ()), и больше .
я также нашел, что Mockito прост и чист .
Одна вещь мне не нравится приблизительно Mockito, то, что Вы не можете заблокировать статические методы .
Лучшее решение насмешки состоит в том, чтобы иметь машину, делают всю работу с автоматизированным основанным на спецификации тестированием. Для Java см. ScalaCheck и Доведение платформа, включенная в библиотека Functional Java . С автоматизированными основанными на спецификации средами тестирования Вы предоставляете спецификацию метода под тестом (свойство об этом, которое должно быть верно), и платформа генерирует тесты, а также фиктивные объекты, автоматически.
, Например, следующее свойство тестирует метод Math.sqrt, чтобы видеть, равен ли квадратный корень какого-либо положительного числа n в квадрате n.
val propSqrt = forAll { (n: Int) => (n >= 0) ==> scala.Math.sqrt(n*n) == n }
, Когда Вы звоните propSqrt.check()
, ScalaCheck генерирует сотни целых чисел и проверяет Ваше свойство на каждого, также автоматически удостоверяясь, что пограничные случаи покрыты хорошо.
Даже при том, что ScalaCheck записан в Scala и требует Компилятора Scala, легко протестировать код Java с ним. Платформа Доведения в Функциональном Java является чистой реализацией Java тех же понятий.
Мне нравится JMock, потому что Вы в состоянии настроить ожидания. Это полностью отличается от проверки, если метод назвали найденным в некоторых ложных библиотеках. Используя JMock можно записать очень сложные ожидания. Посмотрите обман-sheat jmock .
Да, Mockito является большой платформой. Я использую его вместе с hamcrest и облик Google для установки моих тестов.
Я имел успех с JMockit.
Это является довольно новым, и таким образом, это - немного сырых данных и под - зарегистрированный. Это использует ASM для динамичного переопределения байт-кода класса, таким образом, это может дразнить все методы включая статический, частное, конструкторов и статические инициализаторы. Например:
import mockit.Mockit;
...
Mockit.redefineMethods(MyClassWithStaticInit.class,
MyReplacementClass.class);
...
class MyReplacementClass {
public void $init() {...} // replace default constructor
public static void $clinit{...} // replace static initializer
public static void myStatic{...} // replace static method
// etc...
}
Это имеет интерфейс Expectations, позволяющий сценарии записи/воспроизведения также:
import mockit.Expectations;
import org.testng.annotations.Test;
public class ExpecationsTest {
private MyClass obj;
@Test
public void testFoo() {
new Expectations(true) {
MyClass c;
{
obj = c;
invokeReturning(c.getFoo("foo", false), "bas");
}
};
assert "bas".equals(obj.getFoo("foo", false));
Expectations.assertSatisfied();
}
public static class MyClass {
public String getFoo(String str, boolean bool) {
if (bool) {
return "foo";
} else {
return "bar";
}
}
}
}
оборотная сторона - то, что это требует Java 5/6.
Вы могли также взглянуть на тестирование использования Groovy. В Groovy можно легко дразнить интерфейсы Java с помощью 'как' оператор:
def request = [isUserInRole: { roleName -> roleName == "testRole"}] as HttpServletRequest
Кроме этой основной функциональности Groovy предлагает намного больше на передней стороне насмешки, включая мощное MockFor
и StubFor
классы.
Я - создатель PowerMock так, очевидно, я должен рекомендовать это! :-)
PowerMock расширяет и EasyMock и Mockito со способностью к ложные статические методы , финал и даже закрытые методы. Поддержка EasyMock полна, но плагину Mockito нужна еще некоторая работа. Мы планируем добавить поддержку JMock также.
PowerMock не предназначается для замены других платформ, скорее он может использоваться в щекотливых ситуациях, когда другие платформы не позволяют дразнить. PowerMock также содержит другие полезные функции такой как подавляющие статические инициализаторы и конструкторы.
Мы в большой степени используем EasyMock и Расширение Класса EasyMock на работе и довольно довольны им. Это в основном дает Вам все, в чем Вы нуждаетесь. Смотрите на документацию, существует очень хороший пример, который показывает Вам все функции EasyMock.
Сайт проекта JMockit содержит много сравнительной информации о текущих наборах инструментов для имитации.
В частности, ознакомьтесь с матрицей сравнения функций , которая охватывает EasyMock, jMock, Mockito, Unitils Mock, PowerMock и, конечно же, JMockit. Я стараюсь поддерживать его точность и актуальность, насколько это возможно.
]I used JMock early. Я попробовал Mockito на моем последнем проекте и он мне понравился. Более лаконичный, более чистый. PowerMock покрывает все потребности, отсутствующие в Mockito, такие как насмешка над статическим кодом, насмешка над созданием экземпляра, насмешка над финальными классами и методами. Так что у меня есть всё, что нужно для выполнения работы.[
].