1 / 1 / 0
Регистрация: 20.08.2013
Сообщений: 20
1

Непонятная работа при считывании строки

03.09.2013, 12:54. Показов 1291. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Доброго дня всем.

Возникла проблема в следующем коде:

Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
import java.io.*;
//import java.util.*; //для Scanner
 
public class HelloUser {
 
    public static void main(String[] args) {
        char yesNoQuestion = 'n';
        System.out.println("Здравствуйте! Желаете пройти авторизацию?");
        try {
            yesNoQuestion = (char) System.in.read();
        }catch (IOException error) {
            System.out.println("***Ошибка ввода данных***");
        }
        if ((yesNoQuestion != 'y') && (yesNoQuestion != 'Y')) {
            System.out.println("Прощайте.");
            System.exit(1);
        }
        
        UserName newuser = new UserName ();
        String nameman;
        nameman = newuser.outName();
//      nameman = newuser.outName();    //второй вызов идет корректно
        System.out.print(nameman + ", добро пожаловать!");
    }
}
 
class UserName {
    private String namer;
//  Scanner into = new Scanner (System.in);
    InputStreamReader stringNameUser = new InputStreamReader(System.in);
    BufferedReader bufferString = new BufferedReader (stringNameUser);
    
    UserName (){
        System.out.println("Сработал конструктор");
    }
    
    void getName () {
        try {   
            System.out.println("Введите свое имя: ");
            namer = bufferString.readLine();
            //namer = into.next();
            
        } catch (IOException err) {
            System.out.println("***Ошибка ввода данных***" + err);
        }
    }
    String outName() {  
        getName();
        return namer;   
    }
}


Собственно в методе getName класса UserName не происходит вызова bufferString.readLine();
При повторном вызове метода все корректно работает.
Исправлять не надо, а, просьба, тыкнуть носом, где косяк. Заранее спасибо.

Добавлено через 40 минут
Хм. Вредное влияние оказывает криво написанный блок. Но пока не понял как.
Java
1
2
3
4
5
6
7
8
9
try {
            yesNoQuestion = (char) System.in.read();
        }catch (IOException error) {
            System.out.println("***Ошибка ввода данных***");
        }
        if ((yesNoQuestion != 'y') && (yesNoQuestion != 'Y')) {
            System.out.println("Прощайте.");
            System.exit(1);
        }
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.09.2013, 12:54
Ответы с готовыми решениями:

Зацикливает, при считывании строки
Даже не запрашивает ввод, сразу зацикливает. Что не так? case 3: { char* r =...

Работа с cin при считывании с потока ввода
есть кусочек кода while (1) { string buf = name; cout << "Message : "; string...

Ошибки при считывании строки из файлы
Добрый вечер. Бьюсь с этой проблемой уже не первый день. Но вразумительно ответа в интернете так и...

Как пропустить строки при считывании?
Как считать данные, пропустив первые 5 строк? образец файла: LECROYHDO4034A 50284 Waveform...

3
4 / 4 / 0
Регистрация: 08.08.2013
Сообщений: 48
03.09.2013, 13:03 2
Если вы уберёте код, который спрашивает, желает ли пользователь пройти авторизацию, то всё тоже корректно сработает. Происходит это потому что когда пользователь вводит y или n, в поток System.in попадают ещё 2 символа: \r и \n. Затем, когда происходит попытка получить имя пользователя, метод readLine считает, что введена пустая строка.

решить этот вопрос можно с помощью System.in.skip(2);
1
27 / 27 / 13
Регистрация: 07.11.2010
Сообщений: 154
03.09.2013, 13:13 3
Niarus, Что значит "не происходит вызов"? В результате пусто, в результате только символ перевода строки? Или бросает исключение? Добавь в getName: System.out.println("All ok, your name: " + namer); после вызова чтения строки
2
1 / 1 / 0
Регистрация: 20.08.2013
Сообщений: 20
03.09.2013, 13:24  [ТС] 4
Krasti, про "не происходит вызов" погорячился. Звиняйте за глупость.
Как я понимаю, там просто содержится символ перевода строки. Спасибо LighterV за подсказку.
0
03.09.2013, 13:24
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
03.09.2013, 13:24
Помогаю со студенческими работами здесь

Перенос строки при считывании из файла
Глупый конечно вопрос, но почему не происходит перенос строки? ...

Переполнение строки при считывании из файла
Считываю я строки из файла, в котором их 500 тысяч. Если строка начинается на R, то я записываю её...

Ошибка при считывании строки из файла
При попытке прочитать строку выдает ошибку: Warning: fgets() expects parameter 1 to be resource,...

Увеличить длину строки при считывании файла
Добрый день, не получается найти как можно увеличить длину строки при построчном считывании, для...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru