Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/3: Рейтинг темы: голосов - 3, средняя оценка - 5.00
maSt
5 / 5 / 3
Регистрация: 28.02.2010
Сообщений: 166
1

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

27.11.2012, 01:55. Просмотров 593. Ответов 16
Метки нет (Все метки)

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

Разъясните пожалуйста некоторые детали...
#include "stdafx.h" #include <conio.h> #include <stdio.h> #define eof -1 ...

Главная функция (вводит некоторые значения и передает их и ссылки на некоторые переменные в функцию)
Написать главную функцию, которая вводит некоторые значения и передает их и...

scanf()
Всем привет! Вот маленький тестовый пример #include <stdio.h> int i; ...

Scanf
#include <iostream> #include <string> #include <cstdio> #include <cstdlib>...

scanf ?
господа, подскажите пожалуйста, почему после этого в VC++ вылетает исключение о...

16
prootq
8 / 8 / 2
Регистрация: 09.06.2011
Сообщений: 72
27.11.2012, 03:10 2
считывать его надо не в переменную типа char, а в массив типа char*.
0
alsav22
5442 / 4837 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
27.11.2012, 03:30 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.
0
Kuzia domovenok
2327 / 2074 / 482
Регистрация: 25.03.2012
Сообщений: 7,399
Записей в блоге: 1
27.11.2012, 03:46 4
Цитата Сообщение от alsav22 Посмотреть сообщение
В name[] будет: "CREATE", в name2[]: "file1", в n: 3.
нет, не будет

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

Почему вы передаёте в сканф что угодно, но не адрес начала строки?
C++
1
scanf("%s", name);
1
alsav22
5442 / 4837 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
27.11.2012, 03:56 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;
}
0
Миниатюры
Scanf и некоторые детали  
Kuzia domovenok
2327 / 2074 / 482
Регистрация: 25.03.2012
Сообщений: 7,399
Записей в блоге: 1
27.11.2012, 04:08 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
следовательно бред какой-то...
0
MrGluck
Модератор
Эксперт CЭксперт С++
8087 / 4940 / 1431
Регистрация: 29.11.2010
Сообщений: 13,395
27.11.2012, 04:14 7
Kuzia domovenok, фишка в том, что scanf принимает в начале как бы указатели, но %s само содержит указатель и разыменовывает его, получается оно сразу считывает адрес, а не ждет его.

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

Хотя могу и ошибаться.
0
alsav22
5442 / 4837 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
27.11.2012, 04:16 8
Компиляторы почему-то пропускают. Студия без предупреждений, mingv - только предупреждения.
0
MrGluck
Модератор
Эксперт CЭксперт С++
8087 / 4940 / 1431
Регистрация: 29.11.2010
Сообщений: 13,395
27.11.2012, 04:18 9
Цитата Сообщение от alsav22 Посмотреть сообщение
Компиляторы почему-то пропускают. Студия без предупреждений, mingv - только предупреждения.
Ну смотря какой mingw, мой вот не фыркает.
0
alsav22
5442 / 4837 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
27.11.2012, 04:28 10
Цитата Сообщение от MrGluck Посмотреть сообщение
мой вот не фыркает
А warnings включены?
0
MrGluck
Модератор
Эксперт CЭксперт С++
8087 / 4940 / 1431
Регистрация: 29.11.2010
Сообщений: 13,395
27.11.2012, 04:37 11
Цитата Сообщение от alsav22 Посмотреть сообщение
А warnings включены?
Включены дефолтные, а вот если сделать -Wall, то уже появляются.
0
ForEveR
В астрале
Эксперт С++
7996 / 4755 / 651
Регистрация: 24.06.2010
Сообщений: 10,547
Завершенные тесты: 3
27.11.2012, 09:12 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 некорректен, а как отреагирует на него компилятор - это дело компилятора.
0
alsav22
5442 / 4837 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
27.11.2012, 17:01 13
Цитата Сообщение от ForEveR Посмотреть сообщение
И вообще, давайте не будем писать некорректно. Все-таки код alsav22 некорректен
Согласен.
0
maSt
5 / 5 / 3
Регистрация: 28.02.2010
Сообщений: 166
27.11.2012, 18:12  [ТС] 14
Спасибо всем большое. Теперь когда я вывожу то что считал на экран получаю CREATE.
Но есть еще проблема , когда я пытаюсь сделать так
C++
1
if (name == "CREATE")
То оно не проходит. В интернете уже обыскался нормальной статьи с объяснениями как работает char, но так ничего и не нашел.
И вопрос номер 2.
Возможно ли считать CREATE file1 3
в string ,а потом с этой строки по очереди считать все элементы?
И если да, то как?
0
Kuzia domovenok
2327 / 2074 / 482
Регистрация: 25.03.2012
Сообщений: 7,399
Записей в блоге: 1
27.11.2012, 18:15 15
C++
1
if (strcmp(name, "CREATE")==0){}
0
alsav22
5442 / 4837 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
27.11.2012, 18:31 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;
}
1
Миниатюры
Scanf и некоторые детали  
alsav22
5442 / 4837 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
27.11.2012, 18:37 17
Если name - string, то можно и так писать:
C++
1
if (name == "file1")
0
27.11.2012, 18:37
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.11.2012, 18:37

scanf
Пусть нужно читать из текста слова, пропуская все символы, кроме a-z и A-Z. То...

scanf в C
можна прочитать несколько значений использав всего раз scanf например : scanf...

Scanf зацикливание
Почему зацикливается при вводе символа? int a; while (scanf_s(&quot;%d&quot;, &amp;a) !=...


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

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

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