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

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

Войти
Регистрация
Восстановить пароль
 
 
maSt
5 / 5 / 1
Регистрация: 28.02.2010
Сообщений: 166
#1

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

27.11.2012, 01:55. Просмотров 504. Ответов 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 = "С".Как правильно считать слово?
Заранее спасибо.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.11.2012, 01:55
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Scanf и некоторые детали (C++):

Разъясните пожалуйста некоторые детали... - C++
#include "stdafx.h" #include <conio.h> #include <stdio.h> #define eof -1 int main() { int c; printf("Make...

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

Scanf - C++
#include <iostream> #include <string> #include <cstdio> #include <cstdlib> using namespace std; int maska(string a,string...

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

scanf в C - C++
можна прочитать несколько значений использав всего раз scanf например : scanf ("%d %d",&a,&b); ? - правильно ли это...

scanf() - C++
Всем привет! Вот маленький тестовый пример #include <stdio.h> int i; int main() { printf("Enter value:...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
prootq
8 / 8 / 0
Регистрация: 09.06.2011
Сообщений: 72
27.11.2012, 03:10 #2
считывать его надо не в переменную типа char, а в массив типа char*.
alsav22
5417 / 4813 / 442
Регистрация: 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.
Kuzia domovenok
1891 / 1746 / 118
Регистрация: 25.03.2012
Сообщений: 5,925
Записей в блоге: 1
27.11.2012, 03:46 #4
Цитата Сообщение от alsav22 Посмотреть сообщение
В name[] будет: "CREATE", в name2[]: "file1", в n: 3.
нет, не будет

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

Почему вы передаёте в сканф что угодно, но не адрес начала строки?
C++
1
scanf("%s", name);
alsav22
5417 / 4813 / 442
Регистрация: 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;
}
Миниатюры
Scanf и некоторые детали  
Kuzia domovenok
1891 / 1746 / 118
Регистрация: 25.03.2012
Сообщений: 5,925
Записей в блоге: 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
следовательно бред какой-то...
MrGluck
Модератор
Эксперт CЭксперт С++
7210 / 4376 / 638
Регистрация: 29.11.2010
Сообщений: 11,887
27.11.2012, 04:14 #7
Kuzia domovenok, фишка в том, что scanf принимает в начале как бы указатели, но %s само содержит указатель и разыменовывает его, получается оно сразу считывает адрес, а не ждет его.

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

Хотя могу и ошибаться.
alsav22
5417 / 4813 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
27.11.2012, 04:16 #8
Компиляторы почему-то пропускают. Студия без предупреждений, mingv - только предупреждения.
MrGluck
Модератор
Эксперт CЭксперт С++
7210 / 4376 / 638
Регистрация: 29.11.2010
Сообщений: 11,887
27.11.2012, 04:18 #9
Цитата Сообщение от alsav22 Посмотреть сообщение
Компиляторы почему-то пропускают. Студия без предупреждений, mingv - только предупреждения.
Ну смотря какой mingw, мой вот не фыркает.
alsav22
5417 / 4813 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
27.11.2012, 04:28 #10
Цитата Сообщение от MrGluck Посмотреть сообщение
мой вот не фыркает
А warnings включены?
MrGluck
Модератор
Эксперт CЭксперт С++
7210 / 4376 / 638
Регистрация: 29.11.2010
Сообщений: 11,887
27.11.2012, 04:37 #11
Цитата Сообщение от alsav22 Посмотреть сообщение
А warnings включены?
Включены дефолтные, а вот если сделать -Wall, то уже появляются.
ForEveR
В астрале
Эксперт С++
7970 / 4732 / 321
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 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 некорректен, а как отреагирует на него компилятор - это дело компилятора.
alsav22
5417 / 4813 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
27.11.2012, 17:01 #13
Цитата Сообщение от ForEveR Посмотреть сообщение
И вообще, давайте не будем писать некорректно. Все-таки код alsav22 некорректен
Согласен.
maSt
5 / 5 / 1
Регистрация: 28.02.2010
Сообщений: 166
27.11.2012, 18:12  [ТС] #14
Спасибо всем большое. Теперь когда я вывожу то что считал на экран получаю CREATE.
Но есть еще проблема , когда я пытаюсь сделать так
C++
1
if (name == "CREATE")
То оно не проходит. В интернете уже обыскался нормальной статьи с объяснениями как работает char, но так ничего и не нашел.
И вопрос номер 2.
Возможно ли считать CREATE file1 3
в string ,а потом с этой строки по очереди считать все элементы?
И если да, то как?
Kuzia domovenok
1891 / 1746 / 118
Регистрация: 25.03.2012
Сообщений: 5,925
Записей в блоге: 1
27.11.2012, 18:15 #15
C++
1
if (strcmp(name, "CREATE")==0){}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.11.2012, 18:15
Привет! Вот еще темы с ответами:

scanf ? - C++
господа, подскажите пожалуйста, почему после этого в VC++ вылетает исключение о нарушении доступа (access violation) к каким-то (по ходу...

Качественные детали - C++
Добрый день. Помогите мне кто-нибуть с этим заданием: В отдел технического контроля поступило M однотипных деталей цилиндрической...

scanf, char - C++
Есть нубский вопрос... char * str=new char; //char str; scanf(&quot;%s&quot;,str); char chr; scanf(&quot;%c&quot;,&amp;chr); В этом коде chr хавает...

Scanf в Eclipse - C++
Всем привет) Подскажите пожалуйста как мне в Eclipse ввести какие-то данные в scanf() Заранее спасибо!


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
27.11.2012, 18:15
Ответ Создать тему
Опции темы

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