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

Scanf и некоторые детали - C++

Восстановить пароль Регистрация
 
maSt
 Аватар для maSt
5 / 5 / 1
Регистрация: 28.02.2010
Сообщений: 166
27.11.2012, 01:55     Scanf и некоторые детали #1
Вот работаю со scanfom и появилось несколько вопросов.
C++
1
2
3
4
5
6
7
char name[10];
    
    do 
    {
        scanf("%s",&name);
}
while (...);
Вот 1 вопрос. У меня есть строка ,в строке 2 слова и 1 число.
Например CREATE file1 3.
В интернете находил примеры только как-то так как написал, но name = "С".Как правильно считать слово?
Заранее спасибо.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.11.2012, 01:55     Scanf и некоторые детали
Посмотрите здесь:

C++ scanf в C
scanf ? C++
C++ Качественные детали
C++ Ошибка scanf?
использование scanf C++
Разъясните пожалуйста некоторые детали... C++
scanf() C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
prootq
 Аватар для prootq
8 / 8 / 0
Регистрация: 09.06.2011
Сообщений: 72
27.11.2012, 03:10     Scanf и некоторые детали #2
считывать его надо не в переменную типа char, а в массив типа char*.
alsav22
5284 / 4803 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
27.11.2012, 03:30     Scanf и некоторые детали #3
Вопрос понятней изложите. Если каждое слово из строки отдельно, а число в переменую типа int, то так можно:
C++
1
2
3
4
char name[10];
char name2[10];
int n = 0;
scanf("%s%s%d", &name, &name2, &n);
В name[] будет: "CREATE", в name2[]: "file1", в n: 3.
Kuzia domovenok
 Аватар для Kuzia domovenok
1886 / 1741 / 117
Регистрация: 25.03.2012
Сообщений: 5,910
Записей в блоге: 1
27.11.2012, 03:46     Scanf и некоторые детали #4
Цитата Сообщение от alsav22 Посмотреть сообщение
В name[] будет: "CREATE", в name2[]: "file1", в n: 3.
нет, не будет

Добавлено через 27 секунд
Цитата Сообщение от maSt Посмотреть сообщение
scanf("%s",&name);
и у тебя не будет

Почему вы передаёте в сканф что угодно, но не адрес начала строки?
C++
1
scanf("%s", name);
alsav22
5284 / 4803 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
27.11.2012, 03:56     Scanf и некоторые детали #5
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
нет, не будет
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
#include <fstream>
using namespace std;
 
int main()
{
    char name[10];
    char name2[10];
    int n = 0;
    
    scanf("%s%s%d", &name, &name2, &n);
 
    cout << name << endl << name2 << endl << n << endl;
    
    system("pause");
    return 0;
}
Миниатюры
Scanf и некоторые детали  
Kuzia domovenok
 Аватар для Kuzia domovenok
1886 / 1741 / 117
Регистрация: 25.03.2012
Сообщений: 5,910
Записей в блоге: 1
27.11.2012, 04:08     Scanf и некоторые детали #6
Цитата Сообщение от alsav22 Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
#include <fstream>
using namespace std;
int main()
{
* * char name[10];
* * char name2[10];
* * int n = 0;
scanf("%s%s%d", &name, &name2, &n);
cout << name << endl << name2 << endl << n << endl;
system("pause");
* * return 0;
}
Тогда я ничего не понял. неужели нет разницы
между name и &name ?
Если нет, то выходит также нет и между
между &(name[0]) и &name !
следовательно нет и между name[0] и name
следовательно бред какой-то...
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
5597 / 3076 / 348
Регистрация: 29.11.2010
Сообщений: 8,283
27.11.2012, 04:14     Scanf и некоторые детали #7
Kuzia domovenok, фишка в том, что scanf принимает в начале как бы указатели, но %s само содержит указатель и разыменовывает его, получается оно сразу считывает адрес, а не ждет его.

Голова уже не варит, но надеюсь что-то объяснить удалось.

Хотя могу и ошибаться.
alsav22
5284 / 4803 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
27.11.2012, 04:16     Scanf и некоторые детали #8
Компиляторы почему-то пропускают. Студия без предупреждений, mingv - только предупреждения.
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
5597 / 3076 / 348
Регистрация: 29.11.2010
Сообщений: 8,283
27.11.2012, 04:18     Scanf и некоторые детали #9
Цитата Сообщение от alsav22 Посмотреть сообщение
Компиляторы почему-то пропускают. Студия без предупреждений, mingv - только предупреждения.
Ну смотря какой mingw, мой вот не фыркает.
alsav22
5284 / 4803 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
27.11.2012, 04:28     Scanf и некоторые детали #10
Цитата Сообщение от MrGluck Посмотреть сообщение
мой вот не фыркает
А warnings включены?
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
5597 / 3076 / 348
Регистрация: 29.11.2010
Сообщений: 8,283
27.11.2012, 04:37     Scanf и некоторые детали #11
Цитата Сообщение от alsav22 Посмотреть сообщение
А warnings включены?
Включены дефолтные, а вот если сделать -Wall, то уже появляются.
ForEveR
Модератор
Эксперт С++
 Аватар для ForEveR
7954 / 4716 / 318
Регистрация: 24.06.2010
Сообщений: 10,525
Завершенные тесты: 3
27.11.2012, 09:12     Scanf и некоторые детали #12
clang++3.1

new.cpp:6:12: warning: format specifies type 'char *' but the argument has type 'char (*)[10]' [-Wformat]
scanf("%s", &p);
И вообще, давайте не будем писать некорректно. Все-таки код alsav22 некорректен, а как отреагирует на него компилятор - это дело компилятора.
alsav22
5284 / 4803 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
27.11.2012, 17:01     Scanf и некоторые детали #13
Цитата Сообщение от ForEveR Посмотреть сообщение
И вообще, давайте не будем писать некорректно. Все-таки код alsav22 некорректен
Согласен.
maSt
 Аватар для maSt
5 / 5 / 1
Регистрация: 28.02.2010
Сообщений: 166
27.11.2012, 18:12  [ТС]     Scanf и некоторые детали #14
Спасибо всем большое. Теперь когда я вывожу то что считал на экран получаю CREATE.
Но есть еще проблема , когда я пытаюсь сделать так
C++
1
if (name == "CREATE")
То оно не проходит. В интернете уже обыскался нормальной статьи с объяснениями как работает char, но так ничего и не нашел.
И вопрос номер 2.
Возможно ли считать CREATE file1 3
в string ,а потом с этой строки по очереди считать все элементы?
И если да, то как?
Kuzia domovenok
 Аватар для Kuzia domovenok
1886 / 1741 / 117
Регистрация: 25.03.2012
Сообщений: 5,910
Записей в блоге: 1
27.11.2012, 18:15     Scanf и некоторые детали #15
C++
1
if (strcmp(name, "CREATE")==0){}
alsav22
5284 / 4803 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
27.11.2012, 18:31     Scanf и некоторые детали #16
Цитата Сообщение от maSt Посмотреть сообщение
И вопрос номер 2.
Возможно ли считать CREATE file1 3
в string ,а потом с этой строки по очереди считать все элементы?
И если да, то как?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
#include <sstream>
#include <string>
using namespace std;
 
int main()
{
    string str;
    string name;
    int n = 0;
    
    stringstream s;
    
    getline(cin, str);
    
    s << str;
    s >> str >> name >> n;
 
    cout << str << endl << name << endl << n << endl;
    
    system("pause");
    return 0;
}
Миниатюры
Scanf и некоторые детали  
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.11.2012, 18:37     Scanf и некоторые детали
Еще ссылки по теме:

C++ printf/scanf
C++ Функция scanf()
C++ Главная функция (вводит некоторые значения и передает их и ссылки на некоторые переменные в функцию)
C++ Scanf
C++ Scanf зацикливание

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

Или воспользуйтесь поиском по форуму:
alsav22
5284 / 4803 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
27.11.2012, 18:37     Scanf и некоторые детали #17
Если name - string, то можно и так писать:
C++
1
if (name == "file1")
Yandex
Объявления
27.11.2012, 18:37     Scanf и некоторые детали
Ответ Создать тему
Опции темы

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