Показать полную графическую версию : Функция ограничения занятости памяти - С
Внимательно читаем документацию на ф-ии scanf и gets. В частности, scanf после считывания числа, оставляет символа перехода на новую строку во входном потоке, если его специально не попросить его убрать. А ф-ия gets, как известно считывает до первого '\n', поэтому наткнувшись на этот символ, не убранный ещё scanf'ом она сразу завершает свою работу.
Должно быть так: scanf("%d\n",&veg.caloricity );
Если, число записано на отдельной строке, то его можно считать в строку (т.е. массив char), а затем sscanf'ом или atoi перевести в число.
Должно быть так: scanf("%d\n",&veg.caloricity );
это не работает
Если, число записано на отдельной строке, то его можно считать в строку (т.е. массив char), а затем sscanf'ом или atoi перевести в число.
вот этого не поняла.
предложение понятно, функции почти понятны (sscanf - не совсем понятно как работает: sscanf (input_string, "%as %as", &str_arg1, &str_arg2); - но так же можно просто scanf("%s", &string) ), но к чему это?
и спасибо за помощь и обьяснения :)
Исправлено: Ginger, 18:39 3-02-2004
sscanf работает так же как и scanf, за тем исключением, что считывает не со стандартного потока ввода, а из строчки, которая передаётся первым параметром. К чему это было сказано: если не дружишь со scanf'ом, но дружишь с gets'ом. То считывай всё gets'ом в отдельные буферы, а затем уже из них sscanf'ом вычленяй данные как хочешь.
Т.е. вместо (псевдокод)sscanf("%d", &calor);
gets(name);будет что-то вродеchar buf[256+1];
// ...
gets(buf);
gets(name);
sscanf(buf, "%d", &calor);
И всё же приведи маленький рабочий пример где scanf работает неправильно. Маленький, значит не более 10 строчек, а рабочий, значит что б его можно было без всяких переделок скопипастить в свой редактор, скомпилировать и посмотреть результат. А то по куску программы трудно судить.
И всё же приведи маленький рабочий пример где scanf работает неправильно.
18 строчек пойдут ;)
#include <stdio.h>
int main(void)
{
int x;
int i;
char y[10];
for(i=0; i<4; i++)
{
printf("Please, enter your name: ");
gets(y);
printf("Please, enter your age: ");
scanf("%i", &x);
printf("%s - %i ", y, x);
}
}
первый луп проходит на ура, но следующие нет.
char buf[256+1]; // ...
gets(buf);
gets(name);
sscanf(buf, "%d", &calor);
а. ясен пень :) так работает.
может тему переименовать? - Создание бд с помощью structure и file в С
к нам, конечно, никто не прикапывается, но тему мы не по названию обсуждаем. потом кому-нить пригодиться, в поиске найдёт...
Исправлено: Ginger, 15:08 4-02-2004
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.