Diskuze: řádky v C
V předchozím kvízu, Online test znalostí C++, jsme si ověřili nabyté zkušenosti z kurzu.

Člen

Zobrazeno 14 zpráv z 14.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Online test znalostí C++, jsme si ověřili nabyté zkušenosti z kurzu.
Pretože ďaší cyklus berie ako vstup znak '\n' (enter).
Nedá sa mi prodať obrázok, tak to sem napíšem:
#include <stdio.h>
int main(void)
{
int i;
char c;
for (i = 0; i < 10; i++) {
printf("%d - ", i + 1);
c = getchar();
}
return 0;
}
Výpis:
1 - a
2 - 3 - s
4 - 5 - d
6 - 7 - f
8 - 9 - g
10 -
Zamysli sa nad tým, že getchar() zoberie len jeden znak, ďalší je enter, ktorým ho potvrdíš.
Riešenie je napr.:
#include <stdio.h>
int main(void)
{
int i;
char c;
for (i = 0; i < 10; i++) {
printf("%d - ", i + 1);
c = getchar();
while (getchar() != '\n') ; // zbavenie sa znaku enter
}
return 0;
}
Výpis:
1 - a
2 - s
3 - d
4 - f
5 - g
6 - h
7 - j
8 - k
9 - l
10 - m
Alebo
#include <stdio.h>
int main(void)
{
int i, c; // znak sa musí deklarovať ako číslo, nie ako char
//char c;
for (i = 0; i < 10; i++) {
printf("%d - ", i + 1);
scanf(" %c", c); // medzera pred %c zoberie znak enter
}
return 0;
}
Já jsem to chtěl udělat tak, že vstup je dlouhý text, který se nevleze na jeden řádek, tak pokračuje i na druhý řádek a program má jenom zkopírovat vstup na výstup, ale pomocí příkazů getchar, putchar zkopíruje jen jeden řádek.
ještě jinak...program na počítání řádků:
main()
{
int z, pr;
pr=1;
while!=EOF)
{
if (z=='\n')
{
++pr;
}
printf("%d\n", pr);
}
}
vypíše samé jedničky a jen jednu dvojku i když je na druhém řádku více znaků
A čo takto?
#include <stdio.h>
int main(void)
{
int pr;
char z;
pr = 0;
while(z = getchar()) {
if (z == '\n') {
pr++;
printf("%d\n", pr);
}
if (pr == 5)
break;
}
return 0;
}
Mám ale pocit, že chceš čítať zo súboru a nie zo vstupu z klávesnice.
Ten program byl k tomu asi původně určený, ale nevím proč se getchar zastaví, "\n" je regulérní znak, neměl by zastavit cyklus.
Tak ešte raz, getchar() berie iba jeden znak, teda keď napíšeš viac
znakov do riadku, berie iba prvý znak.
Keď zadáš asdfgh\n, tak getchar() zoberie iba 'a'.
Keď zadáš a\n, tak tiež zoberie iba 'a' a znak '\n' ostane v bufferi.
Vyskúšaj si tento programík:
#include <stdio.h>
int main(void)
{
char c;
c = getchar();
putchar(c);
c = getchar();
putchar('\n'); // novy riadok
if (c == '\n')
printf("Bol stlaceny enter!\n");
else
putchar(c);
return 0;
}
Spusti a zadaj napr.: asdf(enter).
Spusti druhý krát a zadaj: a(enter).
Ešte jeden príklad.
V programe zadaj napr.: asdfg\n
#include <stdio.h>
int main(void)
{
char c;
c = getchar();
putchar(c);
c = getchar();
putchar(c);
c = getchar();
putchar(c);
c = getchar();
putchar(c);
c = getchar();
putchar(c);
return 0;
}
Díky, už jsem na to přišel, já jsem chtěl číst z klávesnice stejně jako ze souboru.:)
Zobrazeno 14 zpráv z 14.