Funkcia fgets() – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Funkcia fgets() – C / C++ – Fórum – Programujte.comFunkcia fgets() – C / C++ – Fórum – Programujte.com

 

Spuštěný nový filmový web Filmožrouti.cz — vše o Avengers, Pacific Rim, Thor, Star Wars…
LuKeSkO0
Duch
28. 10. 2017   #1
-
0
-

Ahojte,

Mam menší problém.

Vytvoril som kód, ktorý mi najprv načíta dva reťazce a potom všetky výskyty druhého reťazca v prvom vymaže. Všetko funguje až na jednu malú vec. Ak zadám menej ako 50 znakov tak druhý reťazec v pohode načíta na ďalšom riadku ale ak zadám viacej ako 50 znakov tak ono si to automaticky zoberie ďalšie 3 písmena z reťazca a berie to ako by som zadal ja ten druhý reťazec. Takže otázka je: Ako mám donútiť ten program aby na jeden riadok načítal prvý reťazec a na druhý riadok druhý reťazec s tým, že ak zadám viacej ako 50 znakov tak si to nezoberie automaticky? Predom Ďakujem.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>


int main(void)
{
	char retazec[51], podretazec[4], novy_retazec[51];
	int i = 0, j = 0;
	fgets(retazec, 51, stdin);
	int buffer = strlen(retazec) - 1;
	if ((buffer > 0) && (retazec[buffer] == '\n')) retazec[buffer] = '\0';
	fgets(podretazec, 4, stdin);
	buffer = strlen(podretazec) - 1;
	if ((buffer > 0) && (podretazec[buffer] == '\n')) podretazec[buffer] = '\0';
	while (retazec[i] != '\0')
	{
		if ((retazec[i] == podretazec[0]) && (retazec[i + 1] == podretazec[1]) && (retazec[i + 2] == podretazec[2])) i += 3;
		else
		{
			novy_retazec[j] = retazec[i];
			j++;
			i++;
		}
	}
	novy_retazec[j] = '\0';
	puts(novy_retazec);
	system("PAUSE");
	return 0;
}
Nahlásit jako SPAM
IP: 178.143.82.–
gna
~ Anonymní uživatel
455 příspěvků
28. 10. 2017   #2
-
0
-

Když tam nebude '\n', tak se nenačetl celý řádek.

Nahlásit jako SPAM
IP: 213.211.51.–
MilanL+1
Super člen
31. 10. 2017   #3
-
0
-

#1 LuKeSkO
rozdělil bych tu podmínku k prvnímu vstupu 

	fgets(retazec, 51, stdin);
	int buffer = strlen(retazec) - 1;
	if (buffer > 0) {
		while (!(retazec[buffer] == '\n')) {
			fgets(retazec[buffer],1,stdin); 
/* čekání na enter
/* retezec = prvních 50 znaků
		}
 		retazec[buffer] = '\0';
	}

pokud bys chtěl posledních 50 znaků bylo by potřeba udělat na vstup delší pole a poté z něj těch posledních 50+1 znak zkopírovat do retezec.

Nahlásit jako SPAM
IP: 91.139.9.–
Zjistit počet nových příspěvků

Přidej příspěvek

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 43 hostů

Podobná vlákna

Fgets — založil Dusan

Fgets() nerozumiem tomu — založil nord

Vstup pomocí fgets — založil Zelenáč Uplný

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032017 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý