Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.05.2018, 12:25   #1
brainwd80
Новичок
Джуниор
 
Регистрация: 09.05.2018
Сообщений: 2
Сообщение Некорректная работа программы при переносе в кода отдельную функцию

Привет, есть код, который в методе main работает как нужно - формирует массив char и посимвольно заносит его в файл:

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <io.h>
#include <conio.h>
#include <process.h>
#include <locale.h>
#include <malloc.h>
#include <string.h>
#include <fcntl.h.>
#include <stdlib.h>
#include <windows.h>

Код:
void main() {
	int n = 0;
	char line[10];
	FILE *input;
	if (!(input = fopen("M://folder/file.txt", "w"))) {
		printf("Something went wrong!");
		return;
	}
	else
	{
	     printf("Print new line \n");
	     gets_s(line);
	}
	while (line[n]) {
		fputc(line[n++], input);
	}
	_getch();
	fclose(input);
}
Но при переносе его в отдельную функцию и использовании switch при попытке ввода символов программа вылетает обратно на switch, и далее работает некорректно.

Код:
void button1() {
	int n = 0;
	char line[10];
	FILE *input;
	if (!(input = fopen("M://folder/file.txt", "w"))) {
		printf("Something went wrong!");
		return;
	}
	else
	{
		printf("Print new line \n");
		gets_s(line);
		while (line[n]) {
			fputc(line[n++], input);
		}
		_getch();
		fclose(input);
	}
}

void main() {
	SetConsoleCP(1251);
	SetConsoleOutputCP(1251);
	int menu_number = 0;
	system("cls");
	while (1)
	{
		puts("1 - Сформировать строку и записать в файл");
		fflush(stdin);
		printf("Введите пункт меню \n");
		scanf_s("%d", &menu_number);
		switch (menu_number)
		{
			case 1: button1(); break;
			case 5: exit(0);
			default:puts("Неверно выбран пункт меню");
			_getch();
		}
	}
}
Что я делаю не так?) Спасибо
brainwd80 вне форума Ответить с цитированием
Старый 10.05.2018, 09:05   #2
brainwd80
Новичок
Джуниор
 
Регистрация: 09.05.2018
Сообщений: 2
По умолчанию

Разобрался,
Причина: после выполнения
Код:
scanf_s("%d", &menu_number);
в буфере остается символ перехода на новую строку "\n".

Решение: взять необходимое значение и проигнорировать этот символ
следующим образом:
Код:
scanf_s("%d%*c", &menu_number);
brainwd80 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сбой работы кода при переносе из 2007 в 2010 excel Dima36668 Microsoft Office Excel 2 29.05.2014 15:47
Ошибка при переносе sort() и equal_range() в функцию класса Boltok Общие вопросы C/C++ 2 29.11.2012 00:31
Проблема при переносе кода из паскаля в делфи _4Alex4_ Помощь студентам 3 11.04.2012 08:38
Некорректная работа программы при формировании массива @Manya@ Общие вопросы C/C++ 13 22.04.2010 21:40
Проблема при переносе кода. MasterK Общие вопросы Delphi 1 08.04.2010 18:05