Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
kukuu
1 / 1 / 0
Регистрация: 03.12.2012
Сообщений: 83
#1

проверки с++ - C++

26.10.2013, 18:49. Просмотров 418. Ответов 14
Метки нет (Все метки)

Здравствуйте,помогите пожалуйста сделать проверки на пустые строки ,чтобы когда пользователь вводит enter сразу выдавалась ошибка,а то у меня получается так,что enter вводится до бесконечности
Код
#include "stdafx.h"
#include <stdio.h>
#include <iostream> 
#include <cstring>
#include <locale>

using namespace std;


char * my_strcat(char * dst, const char * src)
{

    char * p = dst;
    while ( *p )
        ++p;
    while ( *p++ = *src++ )
        ;
    return dst;
}
 
int main()
	
{

	setlocale(0,"rus");
    char str1[BUFSIZ], str2[BUFSIZ];
	
	while  (str1[0] == '\0') 
	{
       printf("errorr ");
	  
	}
    printf("First: ");
    scanf("%s",str1);
    printf("Second: ");
    scanf("%s",str2);
    printf("Together: %s\n", my_strcat(str1, str2));
    system ("pause");
    return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.10.2013, 18:49     проверки с++
Посмотрите здесь:

Зацикливание проверки - C++
Доброго времени суток! 1) Хотелось бы узнать почему не срабатывает проверка в цикле? 2) Можно ли обойтись без цикла и темболее уж без...

Условие проверки (if) - C++
В моем фрагменте кода есть следующие условия: if (card1.dostoinstvo &gt; card2.dostoinstvo &amp;&amp; (card1.dostoinstvo != 14 &amp;&amp;...

Проверки ввода - C++
Подскажите пожалуйста: 1. Как сделать проверку &quot;введено число или не-число&quot; ? 2. Если при вводе используется переменная char, как...

Алгоритм проверки - C++
Всем доброго времени суток! Есть один код, это как бы шашки. Задача программы определить какие шашки находятся под ударом,какая шашка...

Нет проверки ввода - C++
Функция void Enter_Information() { system(&quot;cls&quot;); cout &lt;&lt; &quot;ЗАПОЛНЕНИЕ ИНФОРМАЦИИ ОБ УЧАЩЕМСЯ:&quot;&lt;&lt;endl; bool flag1 =...

Нуждаюсь в проверки программиста. - C++
Добрый вечер! Я учусь в институте на специальности, информационная безопасность, начали проходить с++, т.к. мало чего еще понимаю, хотелось...

Вызов функции проверки - C++
Доброго времени суток! 2-ой день мучаюсь с задачей. Есть массив прямоугольников, вершины которых я считал с файла. Задача состоит в том,...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Avazart
7102 / 5279 / 267
Регистрация: 10.12.2010
Сообщений: 23,290
Записей в блоге: 17
26.10.2013, 19:00     проверки с++ #2
Блог: Безопасный ввод данных на Си
kukuu
1 / 1 / 0
Регистрация: 03.12.2012
Сообщений: 83
26.10.2013, 20:56  [ТС]     проверки с++ #3
Код
int main()
	
{

	setlocale(0,"rus");
    char str1[BUFSIZ], str2[BUFSIZ];
	
	if (str1 == 0)
	{
            fprintf(stderr, "Ошибка: введена пустая строка.\n");
            return 1;
        }
    printf("First: ");
    scanf("%s",str1);
    printf("Second: ");
    scanf("%s",str2);
    printf("Together: %s\n", my_strcat(str1, str2));
    system ("pause");
    return 0;
}
сделала вот так,вроде бы как в примере показано,все равно enter до бесконечности нажимается,подскажите пжлст,как исправить?
Shtirliz72
201 / 161 / 38
Регистрация: 25.10.2013
Сообщений: 527
26.10.2013, 21:34     проверки с++ #4
Цитата Сообщение от kukuu Посмотреть сообщение
сделала вот так,вроде бы как в примере показано,все равно enter до бесконечности нажимается,подскажите пжлст,как исправить?
А зачем вы пытаетесь проверить строку до того как она была введена?
И, да, - используйте, пожалуйста, тэг "код с++", а не просто код.
kukuu
1 / 1 / 0
Регистрация: 03.12.2012
Сообщений: 83
26.10.2013, 22:46  [ТС]     проверки с++ #5
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
int main()
    
{
 
    setlocale(0,"rus");
    char str1[BUFSIZ], str2[BUFSIZ];
    
    
    printf("First: ");
    scanf("%s",str1);
    if (str1 == 0)
    {
            fprintf(stderr, "Ошибка: введена пустая строка.\n");
            return 1;
    }
    printf("Second: ");
    scanf("%s",str2);
    printf("Together: %s\n", my_strcat(str1, str2));
    system ("pause");
    return 0;
}
если я вас правильно поняла,вы так имели ввиду? но она все равно не так работает
Avazart
7102 / 5279 / 267
Регистрация: 10.12.2010
Сообщений: 23,290
Записей в блоге: 17
26.10.2013, 22:49     проверки с++ #6
Проверка, пустая строка или нет
Shtirliz72
201 / 161 / 38
Регистрация: 25.10.2013
Сообщений: 527
26.10.2013, 22:59     проверки с++ #7
Цитата Сообщение от kukuu Посмотреть сообщение
если я вас правильно поняла,вы так имели ввиду? но она все равно не так работает
Да именно так надо форматировать текст, правильно.
По сабжу - у вас в if ошибка.
Просто str1 - это адрес в памяти, указывающий на массив. В данном случае он всегда неравен 0.
А вот если написать str1[0] == '\0' - это другое дело. Это проверка первого символа в массиве на то не является ли он символом конца строки('\0').
Avazart
7102 / 5279 / 267
Регистрация: 10.12.2010
Сообщений: 23,290
Записей в блоге: 17
26.10.2013, 23:08     проверки с++ #8
Цитата Сообщение от Shtirliz72 Посмотреть сообщение
А вот если написать str1[0] == '\0' - это другое дело. Это проверка первого символа в массиве на то не является ли он символом конца строки('\0').
Да, только что бы оно навярника сработало нужно сначала инициализировать строки нулем
C++
1
2
char str1[BUFSIZE]={'\0'};
char str2[BUFSIZE]={'\0'};
kukuu
1 / 1 / 0
Регистрация: 03.12.2012
Сообщений: 83
26.10.2013, 23:08  [ТС]     проверки с++ #9
я вам уже наверно надоела,но все равно не работает) я уже неделю мучаюсь с этим((
Avazart
7102 / 5279 / 267
Регистрация: 10.12.2010
Сообщений: 23,290
Записей в блоге: 17
26.10.2013, 23:10     проверки с++ #10
Пробуй
C++
1
2
3
4
5
6
7
8
9
10
11
    const int BUFSIZE= 255;
    char str1[BUFSIZE]={0};
    
    printf("First: ");
    scanf("%s",str1);
    if ( !strlen(str1) ) // если длина строки нулевая
    {
            fprintf(stderr, "Ошибка: введена пустая строка.\n");
            system ("pause");
            return 1;
    }
kukuu
1 / 1 / 0
Регистрация: 03.12.2012
Сообщений: 83
26.10.2013, 23:19  [ТС]     проверки с++ #11
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
int main()
    
{
 
    setlocale(0,"rus");
    
    const int BUFSIZE= 255;
    char str1[BUFSIZE]={0};
    char str2[BUFSIZ];
    printf("First: ");
    scanf("%s",str1);
    if ( !strlen(str1) ) // если длина строки нулевая
    {
            fprintf(stderr, "Ошибка: введена пустая строка.\n");
            system ("pause");
            return 1;
    }
    printf("Second: ");
    scanf("%s",str2);
    printf("Together: %s\n", my_strcat(str1, str2));
    system ("pause");
    return 0;
}
вроде бы подставила то что вы говорили,не работает,опять на одном ентере не ограничивается ,а идет до бесконечности((
Shtirliz72
201 / 161 / 38
Регистрация: 25.10.2013
Сообщений: 527
26.10.2013, 23:35     проверки с++ #12
Цитата Сообщение от Avazart Посмотреть сообщение
Да, только что бы оно навярника сработало нужно сначала инициализировать строки нулем
Я сейчас посмотрел описание функции - вроде как при %s у scanf нуль в конец автоматически лепится. Или я не прав?

Добавлено через 2 минуты
Цитата Сообщение от kukuu Посмотреть сообщение
вроде бы подставила то что вы говорили,не работает,опять на одном ентере не ограничивается ,а идет до бесконечности((
Что за BUFSIZ?
Ну и желательно код полностью посмотреть. Плюс, если не компилируется - скажи ошибки.

Добавлено через 9 минут
а ещё - поставь сразу после
scanf("%s",str1);
строку
printf("1");
и посмотри когда она будет выводиться.
kukuu
1 / 1 / 0
Регистрация: 03.12.2012
Сообщений: 83
26.10.2013, 23:44  [ТС]     проверки с++ #13
вот код полностью
C++
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
#include "stdafx.h"
#include <stdio.h>
#include <iostream> 
#include <cstring>
#include <locale>
 
using namespace std;
 
 
char * my_strcat(char * dst, const char * src)
{
 
    char * p = dst;
    while ( *p )
        ++p;
    while ( *p++ = *src++ )
        ;
    return dst;
}
 
int main()
    
{
 
    setlocale(0,"rus");
   
    const int BUFSIZE= 255;
    char str1[BUFSIZE]={0};
     char str2[BUFSIZ];
 
    printf("First: ");
    scanf("%s",str1);
    printf("1");
    if ( !strlen(str1) ) // если длина строки нулевая
    {
            fprintf(stderr, "Ошибка: введена пустая строка.\n");
            system ("pause");
            return 1;
    }
    printf("Second: ");
    scanf("%s",str2);
    printf("Together: %s\n", my_strcat(str1, str2));
    system ("pause");
    return 0;
}
все компилируется ,просто работает немного неправильно когда пустая строка,а когда вводятся символы-все работает правильно.
когда добавила строку printf("1");
выводится вот так
First:
2
1Second: 3
Together: 23
Для продолжения нажмите любую клавишу . . .
ну это с числами ,а если ентер нажать по прежнему так же работает
Shtirliz72
201 / 161 / 38
Регистрация: 25.10.2013
Сообщений: 527
26.10.2013, 23:50     проверки с++ #14
Меня интересовал случай когда она выводится если нажимать enter(надо было нажать несколько раз enter, а затем, если она не вывелась - вбить цифру , нажать enter и лишь затем говорить о результатах).
Впрочем есть другой путь - замени scanf на gets. И тогда у тебя всё должно получится.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.10.2013, 00:24     проверки с++
Еще ссылки по теме:

Проверки различных условий - C++
char str1,str2,str3; // объявление массивов; unsigned int m; //объявление перменной ,после которой будет вставлена подстрока;...

Ошибка проверки ввода - C++
Помогите пожалуйста исправить проверку ввода { cout&lt;&lt;setw(15)&lt;&lt;&quot;Year: \t&quot;; cin&gt;&gt;note.date; if (note.date&lt;1950 &amp; note.date&gt;2000) ...

Функция проверки пароля - C++
Подскажите по поводу проверки пароля, при вводе пароль, не пароль все равно пишет привет, почему strcmp не сравнивает int...

Программа проверки пароля - C++
Люди добрые!!! Помогите пожалуйста. Нужно составить программу, которая проверяет правильность введенного пароля. Паролем является...

Объяснить функцию проверки степени - C++
int proverkastepeni(int n) { return !(n&amp;(n-1)); } Нашел вот такую функцию проверки степени, не совсем понимаю как она работает....


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

Или воспользуйтесь поиском по форуму:
kukuu
1 / 1 / 0
Регистрация: 03.12.2012
Сообщений: 83
27.10.2013, 00:24  [ТС]     проверки с++ #15
Я ваам очень благодарна!!Спасибо) поменяла на gets и все заработало))
Yandex
Объявления
27.10.2013, 00:24     проверки с++
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru