Как дела. Я начинаюсь в c ++ с программой, чтобы экспортировать данные в формате библиографической встречи:
using namespace std;
int main()
{
setlocale(LC_CTYPE,"Spanish");
char autor[40], anio_public[4], nombre_articulo[60], nombre_pagina[30], texto en negritafecha_consulta[30], url[100];
stringstream cadena;
cout<<"Autor:\n"<<endl;
cin.getline(autor,40);
system("cls");
cout<<"Año de publicación:\n"<<endl;
cin.getline(anio_public,4);
system("cls");
cout<<"Nombre del artículo:\n"<<endl;
cin.getline(nombre_articulo,60);
system("cls");
cout<<"Nombre de página consultada:\n"<<endl;
cin.getline(nombre_pagina,30);
system("cls");
cout<<"Fecha de consulta:\n"<<endl;
cin.getline(fecha_consulta,30);
system("cls");
cout<<"Link:\n"<<endl;
cin.getline(url,100);
system("cls");
cadena<<autor<<". ("<<anio_public<<"). "<<nombre_articulo<<". "<<nombre_pagina<<". [Internet], ("<<fecha_consulta<<"), [Disponible en]: "<<url<<endl;
cout<<"\nBibliografía:\n\n"<<endl<<cadena.str();
return 0;
}
Проблема приходит, попросив "Год публикации", так как я считаю очевидным array anio_public[4]
но только он позволяет мне вводить 3 символа в компьютер, чтобы продолжать функционировать правильно; в момент ввождения 4 необходимых символов в компьютер, игнорируются все остальные инструкции ввода данных и меня приносят в конце программы показывая только "Автор" и первые 3 вошедших символа "Года публикации".
Цепь с 3 вошедшими символами:
autor= Autor 1
anio_public= 123 //3 caracteres
nombre_articulo= articulo 1
nombre_pagina= pagina 1
fecha_consulta= fecha/consulta 1
url= url de consulta
Автор 1. (123). статья 1. страница 1. [Интернет], (дата / консультация 1), [Доступный в]: url консультации
Цепь с 4 вошедшими символами:
autor= Autor 1
anio_public= 1234 //4 caracteres
/*
nombre_articulo= articulo 1
nombre_pagina= pagina 1
fecha_consulta= fecha/consulta 1 *todo esto ya no lo toma en cuenta
url= url de consulta
*/
Автор 1. (123)... [Интернет], (), [Доступный в]:
Уже я попробовал меняя размер размер array, менять тип информации в string или int, передвигать линию в конце концов, но он продолжает давать мне проблемы. Какая-то подсказка?
Привет don_caverna я надеюсь помочь тебе. Изюм, который, когда программа ждет разгрузку символов, которые ты даешь ему из-за клавиатуры в консоли и количестве символов, больше, чем та предела, что ты дал array anio_public 4 символов, перемещает следующее:
EJEMPLO:\Изюм, который ты вводишь в компьютер 2018, но когда ты даешь в enter, ты вводишь характер в компьютер '\n', чтобы прыгать от линии, у тебя есть 5 символов вместо 4, которые ты распределил, эта оставшаяся часть остается в буфере, так как они не могут сохраняться в anio_public.
Решение этой проблемы состоит в том, чтобы отлаживать эту разгрузку всякий раз когда ввело в компьютер большее количество символов, что та, которая далеко array, но aveces это не происходит, тогда я рекомендую тебе использовать fgets вместо cin для разгрузку символов, так как эта функция, если он осторожен не оставления в буфере символов, которые могут потом затрагивать функционирование твоей программы.
#include<iostream>
#include<string>
#include<sstream>
#include<stdio.h>
using namespace std;
void limpiarBuffer();
int main() {
setlocale(LC_CTYPE,"Spanish");
char autor[40], anio_public[4], nombre_articulo[60], nombre_pagina[30], fecha_consulta[30], url[100];
stringstream cadena;
cout<<"Autor:\n"<<endl;
fgets(autor, 40, stdin);
system("cls");
cout<<"Año de publicación:\n"<<endl;
fgets(anio_public, 4, stdin);
system("cls");
cout<<"Nombre del artículo:\n"<<endl;
fgets(nombre_articulo, 60, stdin);
system("cls");
cout<<"Nombre de página consultada:\n"<<endl;
fgets(nombre_pagina, 30, stdin);
system("cls");
cout<<"Fecha de consulta:\n"<<endl;
cin.getline(fecha_consulta,30);
system("cls");
cout<<"Link:\n"<<endl;
fgets(url, 100, stdin);
system("cls");
// al poner todos los arrays de caracteres seguidos tiende a fallar
// al separarlos se desaparece el problema
cadena<<autor;
cadena<<". (";
cadena<<anio_public;
cadena<<"). ";
cadena<<nombre_articulo;
cadena<<". ";
cadena<<nombre_pagina;
cadena<<". [Internet], (";
cadena<<fecha_consulta;
cadena<<"), [Disponible en]: ";
cadena<<url<<endl;
cout<<"\nBibliografía:\n\n"<<endl;
string info = cadena.str();
cout<<info;
return 0;
}
void limpiarBuffer() {
while(getchar()!='\n');
}
Даже asÃ, - оставил тебе эту линию кода, который помогал достаточно тебе в функции limpiarBuffer, который ждет характер до тех пор, пока он не найдет разрыв линии или enter или '\n', чтобы отлаживать ввод и оставаться с правильной разгрузкой программы.
, Так что используя fgets header stdio.h ты решаешь твою проблему, надеялся помочь тебе, если ты sirvià ты не забыл расставить знаки препинания во мне!
cin
сstdin
не хорошая идея, так как если не está n синхронизировавшие (для этого он существуетstd::ios_base::sync_with_stdio
) оно не будет функционировать как ожидание – eferion 03.11.2019, 22:56