Ответ 1
Вы можете имитировать EOF с помощью CTRL+D
(для * nix) или CTRL+Z
(для Windows) из командной строки.
Я пытаюсь понять пример 1.9 из книги K & R, но я не понимаю, как отправить EOF. Некоторые источники упоминают Ctr + Z, но это просто завершает программу. Мне как-то удалось отправить EOF с комбинацией Enter и Ctrl + Z и, возможно, Ctrl + V, но я не могу воспроизвести его.
#include <stdio.h>
#define MAXLINE 1000
main()
{
int len;
int max;
char line[MAXLINE];
char save[MAXLINE];
max = 0;
while((len = getline_my(line, MAXLINE)) > 0)
if(len > max) {
max = len;
copy(line, save);
}
if(max > 0)
printf("%S", save);
}
getline_my(s, lim)
char s[];
int lim;
{
int c, i;
for(i=0; i < lim-1 && (c = getchar()) != EOF && c != '\n'; i++)// As long as the condition is fulfilled
s[i] = c;
if (c == '\n') {
s[i] = c;
i++;
}
s[i] = '\0';
return(i);
}
copy(s1, s2)
char s1[];
char s2[];
{
int i;
i = 0;
while((s2[i] = s1[i]) != '\0')
i++;
}
Вы можете имитировать EOF с помощью CTRL+D
(для * nix) или CTRL+Z
(для Windows) из командной строки.
В вдовах, когда вы готовы завершить ввод, нажмите клавишу Enter
, а затем нажмите Ctrl+Z
, а затем Enter
, чтобы завершить ввод.
int main(){
char ch[100];
scanf("%[^EOF]",ch);
printf("\nthe string is:\n%s\n",ch);
fflush(stdin);
return 0;
}
printf("%S", save);
→ printf("%S", save);
В конце концов, в Windows это сделать нелегко, учитывая простой код K & R, предназначенный для Unix-подобных систем. Вы можете отправить '^ Z ^ M' (Ctrl-Z и затем Enter), чтобы отправить Windows-эквивалент EOF, но символ 'EOF', который вы проверяете в этой программе на C, не тот.
Краткий ответ: вы не можете.