![]() |
Нужна помощь по C
Как сделать чтобы прога на C (не ++) в конце цикла выдавала запрос что-то вроде "повторить операцию? y/n". При y соответственно прога начинала выполняться заново, при n вырубалась. (закрывалась окно).
|
Что то типа этого :
char res; while(res!='n') { //Чтото делаем printf("%s","Продолжить y/n") scanf("%c",&res); } |
пример:
Код:
void MyFunc() |
Tulip
Кроме scanf можно использовать getchar... |
1. Короче вот в чем проблема. Есть кусок кода. (ниже). Суть в том, что из 3 вариантов надо выбрать один нажатием соответственно 1,2 или 3. Если юзер нажимает символ, отличный от 1,2 или 3, то должно выскакивать сообщение, что "введите 1,2 или 3". Херня в том что сообщение вылазит два раза подряд (при вводе других символов). Как эту багу исправить?
********************************************************* #include <stdio.h> main() { char s; printf("Please enter 1, 2 or 3" ); while(s!='1' && s!='2' && s!='3') { scanf("%c", &s); if(s!='1' && s!='2' && s!='3') printf("Please, enter the number 1, 2 or 3.\n\n"); } } ********************************************************* 2. И еще. Короче такая фигня. #include <stdio.h> main() { int x=2,y=6; int z; z=x+y; printf("%d",z); } Как мне результат (z) записать в файл? (например result.txt). |
fprintf позволяет писать в файл
|
Так ФИ!!!
************************************************** ******* #include <stdio.h> main() { char s; //printf("Please enter 1, 2 or 3" ); while(s!='1' && s!='2' && s!='3') { // вот будет один раз выскакивать! printf("Please, enter the number 1, 2 or 3.\n\n"); scanf("%c", &s); if(s!='1' && s!='2' && s!='3') //printf("Please, enter the number 1, 2 or 3.\n\n"); } } ************************************************** А про файлы с С не знаю... про ++ могу сказать. ******* |
chast' intera pri sleduyushem scanf zahodit v "s", mozhno reshit' tak (chut' podpraviv if) :
if(s!='1' && s!='2' && s!='3'&&s!=10) sky7 v tvoem sluchae problema ostanetsa |
Цитата:
|
Цитата:
|
10 - возврат каретки
13 - переход строки 27 - ескейп вообсче все коды до 32 (пробел) можно игнорировать в идеале условие выглядит Код:
if(s<'1' || s>'3') |
Tulip
dlya samogo yazyka ne vazhno chto ty podruzamevaesh pod char, dlya nego eto cifry ot 0 do 255... klavisha "ENTER" sostoit iz dvuh bukv : 10 i 13 po tablice ASCII , pri nazhatii etoj klavishy posle vvoda chast' ee zajdet v sleduyushem vvode Добавлено через 2 минуты: CапёР "if(s<'1' || s>'3')" opyat' ta-zhe porblema s interom, on primet snachala bukvu a potom kogda zanovo zajdet v while primet 10 ot intera |
Цитата:
Цитата:
Код:
if(s<32) |
тогда можно :)
|
Цитата:
|
TiamaT
Согласен:) |
где взять компилятор с++?
например "gnu c++" |
|
А вот, еще такой вопрос:
В качестве примера приведу простенький код: ******************* #include <stdio.h> main() { int x; printf("Enter x: "); scanf("%d",&x); } ******************* Как в данной ситуации сделать ограничение на ввод? Имеется ввиду например если с клавы буден введен скажем символ, а не число. То есть как сделать чтоб вводить разрешалось только числовые данные, а ввод символов игнорировался. |
вот например:
Код:
#include <stdio.h> |
А как тебе вот такая реализация, единственный минус - распознает только десятичные числа.
#include <stdio.h> #include <stdlib.h> #include <string.h> int main(int argc, char** argv) { char buf[32], *check; long num; printf("Enter x: "); fgets(buf, sizeof(buf), stdin); num = strtol(buf, &check, 10); if (strncmp(buf, check, sizeof(buf)) != 0) printf("You entered: %ld\n", num); return 0; } |
тоже хорошо, сам такое пользую.
НО - ПОЗВОЛЯЕТ вводить не-числа (не соотв. условию) |
Набирать на клавиатуре позволяет, но если не числа то игнорирует.
|
2TiamaT - введи "0" (без кавычек) ;)
|
поправил, тестируй :)
|
TiamaT, че-то я не совсем понял как работает эта схема. Там вроде буквы вводить можно. CапёР, а если я хочу ввести скажем дробное число?
|
Дробное - то есть с точкой ?
Вариант : разрешим юзеру ОДИН раз ввести точку. вместо int x будет float x , соответственно scanf(... %f ) а не %d , добавляем флажок int flag_point = 1 и ещё один ELSE IF: Код:
... |
Tulip
если нужно вводить дробные, то используй strtod(buf, &check) вместо strtol. если хочешь вводить шестнадцатиричные (типа 0x234h) то используй strtol(buf, &check, 16). Ну и в printfе надо будет поменять конечно. |
Есть одна проблема. Ниже я написал часть кода. Суть его в том, что нужно ввести два раза числа. (в первом случае 1,2,3 или 4. Во-втором 1 или 2). Проблема в том, что после ввода в первый раз, нельзя ввести во второй раз. То есть программа как бы перепрыгивает через второй scanf (не дает ввести значение) и завершается. Как можно это исправить? :(
#include <stdio.h> main() { char i; printf("Enter number 1,2,3 or 4: "); do { scanf("%c",&i); } while(i!='1' && i!='2' && i!='3' && i!='4'); i=10; do { printf("Enter number 1 or 2: "); scanf("%c",&i); } while(i!='1' && i!='2' && i!=10); } |
хехе, а зачем тебе присваивать i=10, если при первом же обороте цикла ты затираешь свою 10 в i новым значением которое у тебя scanf прочитал с консоли?
|
Код:
#include <stdio.h> |
SapeR
Еще хорошо бы scanf на getch заменить |
Цитата:
|
Проблемма в твоём случае была в "букве" ENTER - нажатие на неё генерирует не один символ а два - 13 и 10.
13 закрывает первый скан, а 10 попадает во второй. Примитивное решение - команда getch() сразу после scanf(%c) Или вместо scanf("%c",&i) используй i=getche() |
Tulip
Это тебе в школе такую задачку задали? Помню что-то типа такого в 8 классе в школе писали. |
Да нет. Просто я с Си знаком недели две-три, поэтому еще мало в нем разбираюсь.
|
Удачи в изучении !
А с каких языков начинал ? |
Да так, паскаль частично знаю. И еще раньше ява скриптами увлекался.
|
Да блин, теперь народ изучает все не в том порядке как надо, я вот изучал в таком порядке:
ассемблер, С, SH, REGEXP, AWK, SED, PERL. |
А как сделать, чтоб можно было выводить текст на экран в каком-нибудь другом цвете, отличном от стандартного?
И еще. Какой щас самый нормальный компилятор? А то я пользуюсь старьем - TurboC 2.0 под дос. |
| Часовой пояс GMT +4, время: 22:38. |
Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.