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

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

Восстановить пароль Регистрация
 
kukuu
1 / 1 / 0
Регистрация: 03.12.2012
Сообщений: 83
26.10.2013, 18:49     проверки с++ #1
Здравствуйте,помогите пожалуйста сделать проверки на пустые строки ,чтобы когда пользователь вводит 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++
C++ Проверки ввода
функция проверки пароля C++
Проверки различных условий C++
Алгоритм проверки C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Avazart
 Аватар для Avazart
6901 / 5141 / 252
Регистрация: 10.12.2010
Сообщений: 22,604
Записей в блоге: 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
200 / 160 / 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
 Аватар для Avazart
6901 / 5141 / 252
Регистрация: 10.12.2010
Сообщений: 22,604
Записей в блоге: 17
26.10.2013, 22:49     проверки с++ #6
Проверка, пустая строка или нет
Shtirliz72
200 / 160 / 38
Регистрация: 25.10.2013
Сообщений: 527
26.10.2013, 22:59     проверки с++ #7
Цитата Сообщение от kukuu Посмотреть сообщение
если я вас правильно поняла,вы так имели ввиду? но она все равно не так работает
Да именно так надо форматировать текст, правильно.
По сабжу - у вас в if ошибка.
Просто str1 - это адрес в памяти, указывающий на массив. В данном случае он всегда неравен 0.
А вот если написать str1[0] == '\0' - это другое дело. Это проверка первого символа в массиве на то не является ли он символом конца строки('\0').
Avazart
 Аватар для Avazart
6901 / 5141 / 252
Регистрация: 10.12.2010
Сообщений: 22,604
Записей в блоге: 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
 Аватар для Avazart
6901 / 5141 / 252
Регистрация: 10.12.2010
Сообщений: 22,604
Записей в блоге: 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
200 / 160 / 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
200 / 160 / 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++ вызов функции проверки
C++ Ошибка проверки ввода
C++ Условие проверки (if)

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

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

Текущее время: 01:04. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru