标签: getchar

为什么这个getchar()循环在输入一个字符后停止?

#include <stdio.h>

int main() {
    char read = ' ';

    while ((read = getchar()) != '\n') {
        putchar(read);
    }

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我的输入是f(当然是输入).我希望getchar()再次请求输入,但程序终止.怎么会?我怎样才能解决这个问题?

c getchar

3
推荐指数
1
解决办法
5797
查看次数

使用getchar()输入字符串

以下代码使用getchar()接受一行输入.

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

int main()
{
 char *rawString = (char *)malloc(200*sizeof(char));
 char *rawStringInitial = rawString;
 char c;
 c=getchar();
 while(c!='\n')
 {
  *rawString=c;
  rawString++;
  c=getchar();
 }
 *rawString='\0';
 printf("\n[%s]\n",rawStringInitial);
 return(0);
}
Run Code Online (Sandbox Code Playgroud)

键入时,如果我按退格键,它不应该被getchar()接收并存储在rawString指向的位置吗?但是输出只显示没有任何特殊字符的最终字符串.有人能解释为什么吗?

c getchar

3
推荐指数
1
解决办法
2万
查看次数

如何刷新控制台缓冲区?

我有一些重复运行的代码:

printf(“您要继续吗?是/否:\ n”);
keepplaying = getchar();

在下一个我的代码正在运行时,它不会等待输入。我发现第二个时间的getchar使用'\ n'作为字符。我在说这是由于sdio有一些缓冲区,所以它保存了最后一个输入“ Y \ n”或“ N \ n”。

我的问题是,在使用getchar之前如何刷新缓冲区,这会使getchar等待我的回答?

c getchar

3
推荐指数
1
解决办法
2万
查看次数

printf()在while循环中的奇怪行为

有人可以解释一下为什么我看到while循环的printf()函数的双输入:

#include <ctype.h>
#include <stdio.h>

int main(){
    int x = 0;

    while ( x != 'q'){

    printf("\nEnter a letter:");

    x=getchar();
    printf("%c\n", x);
    if( isalpha(x) )
      printf( "You entered a letter of the alphabet\n" );
    if( isdigit(x) )
      printf( "You entered the digit %c\n", x);
    }   
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

Debian Squeeze(gcc版本4.4.5(Debian 4.4.5-8))中代码的输出是:

Enter a letter:1
1
You entered the digit 1

Enter a letter: // why is the first one appearing ???


Enter a letter:2
2
You entered the digit 2
Run Code Online (Sandbox Code Playgroud)

c printf while-loop getchar

3
推荐指数
1
解决办法
1847
查看次数

在null字符之前的这些附加字符是什么?

我正在关注Kernighan和Ritchie的C书,但是我在使用弦乐时遇到了一些困难.

在下面的代码中,似乎我的字符串,虽然从用户输入通过getchar()包含额外的,我会说是垃圾字符,在null(\0)字符之前.

这是代码:

#include <stdio.h>
main() {

        char s[200];
        int c, i;

        printf("Enter input string:\n");
        for (i = 0; ( c = getchar()) != '\n'; i++) {
                s[i] = c;
        }   

        printf("Contents of input string:\n");
        for (i = 0; s[i] != '\0'; i++) {
                printf("%d: (%d) = ", i, s[i]);
                putchar(s[i]);
                printf("\n");
        }   

        return 0;
}
Run Code Online (Sandbox Code Playgroud)

这是输出逐个显示字符数组的每个元素.它意味着以下内容:

Array_element: (ascii_number) = ascii_character

0: (72) = H
1: (101) = e
2: (108) = l
3: (108) = …
Run Code Online (Sandbox Code Playgroud)

c ascii getchar

3
推荐指数
1
解决办法
164
查看次数

k和r行计数1.5.3不工作?

我在使用k&r 1.5.3时遇到了麻烦.显然我是一个完全的初学者.下面是完全来自本书的代码,正如我输入的那样.它编译好并运行.它返回字符,但从不打印行数.我正在使用ssh进入Ubuntu机器.我妻子的Mac上的钥匙可以解释为'\n'吗?

#include <stdio.h>

/*count lines in input*/

main()
{
     int c, n1;

     n1 = 0;
     while ((c = getchar()) != EOF)
          if (c == '\n')
               ++n1;
     printf("%d\n", n1);
}
Run Code Online (Sandbox Code Playgroud)

c getchar

3
推荐指数
1
解决办法
329
查看次数

关于getchar()循环如何在内部工作的困惑

我已经包含了一个使用getchar()下面的示例程序,供参考(并非任何人都可能需要它),如果您愿意,可以随意解决它的问题.但我的问题是:

程序调用时究竟发生了什么getchar()

以下是我的理解(请澄清或纠正我):

  1. 调用getchar时,它会检查STDIN缓冲区以查看是否有任何输入.
  2. 如果没有任何输入,getchar会睡觉.
  3. 唤醒后,getchar会检查是否有任何输入,如果没有,则让它自己再次进入睡眠状态.
  4. 重复步骤2和3直到有输入.
  5. 一旦有输入(按照约定在结尾处包含'EOF'),getchar返回此输入的第一个字符并执行某些操作以指示下一次调用getchar应该从同一缓冲区返回第二个字母?我不太确定那是什么.
  6. 当除了EOF之外没有其他字符时,getchar是否会刷新缓冲区?

我使用的术语可能不太正确.

#include <stdio.h>

int getLine(char buffer[], int maxChars);

#define MAX_LINE_LENGTH 80

int main(void){

    char line[MAX_LINE_LENGTH];
    int errorCode;

    errorCode = getLine(line, sizeof(line));
    if(errorCode == 1)
        printf("Input exceeded maximum line length of %d characters.\n", MAX_LINE_LENGTH);
    printf("%s\n", line);

    return 0;

}

int getLine(char buffer[], int maxChars){
    int c, i = 0;
    while((c = getchar()) != EOF && c != '\n' && i < maxChars - 1)
        buffer[i++] = …
Run Code Online (Sandbox Code Playgroud)

c io internals getchar

3
推荐指数
1
解决办法
803
查看次数

C中的getchar()完成而不按Enter键

从我之前的帖子中,我发现getchar()只有在按Enter键时才会完成.我们考虑一下这段代码:

#include<stdio.h>
main()
{
  getchar();
  getchar();
  getchar();
  getchar();
  getchar();


}
Run Code Online (Sandbox Code Playgroud)

我希望它能像这样运行:我按下某个键1,然后按Enter键,然后按键2键,然后按键3键,然后按键4键,然后按键4键,输入键,最后按键5键,输入,程序应立即终止.这不是实际发生的事情.会发生什么:我按下某个键1然后按Enter键,然后按键2键,输入键,然后按键3键,输入,程序最终终止!

  • 为什么最后两个getchar()不起作用?

我观察到的另一个奇怪的事情是,如果我这样做:key1,key2,key3,key4 + Enter然后程序终止.例如,如果我连续按q,w,e和r然后按Enter键,程序将终止.

  • 为什么不是所有的getchar()都要求输入?这是否意味着getchar()将任何其他键作为Enter?但接下来的密钥是否作为下一个getchar()的输入?

让我们考虑另一个代码:

#include<stdio.h>
main()
{

  int c=getchar();
  int d=getchar();
  int e=getchar();
  printf("2 getchar are remaining\n");
  int f=getchar();
  int g=getchar();
  printf(" c is %d, d is %d, e is %d, f is %d and g is %d",c,d,e,f,g);

} 
Run Code Online (Sandbox Code Playgroud)

我输入:ABCDEFG然后输入.当我按下C或D时,应该打印第2getchar.但它最后打印,意味着所有getchar()s同时执行 - 这很奇怪.

  • 程序是否逐行执行?即在第三个getchar之后,printf()应该可以工作.但是当所有的getchar()都被执行时它终于工作了.

c io getchar

3
推荐指数
1
解决办法
3166
查看次数

C - getchar()没有正确读取输入的第二个字符

我试图用来getchar()读取输入数字的所有数字并将它们存储在一个数组中.但每次我运行程序时,第二个数字都会出错.

这是我的代码:

int ch = 0;
int digits[0];
int i = 0;

while ((ch = getchar()) != '\n') {
    digits[i] = ch - '0';
    i++;
}
Run Code Online (Sandbox Code Playgroud)

为了表明会出现什么问题,我插入了两个printf:

while ((ch = getchar()) != '\n') {
    printf("%d ", ch);
    digits[i] = ch - '0';
    printf("%d\n", ch);
    i++;
}
Run Code Online (Sandbox Code Playgroud)

例如,当我输入时1100,我得到:

49 49

49 1

48 48

48 48

当我在一个单独的循环中打印数组时,输出是:

1 10 0 0

当我输入时66666,我得到:

54 54

54 6

54 54

54 54

54 5

阵列是: …

c getchar

3
推荐指数
2
解决办法
371
查看次数

以下代码中的EOF是什么?

我正在阅读C编程语言书,在下面给出的代码中,我不知道如何在这里获得EOF?而且我还没有得到什么是EOF?是字符,整数还是条件?如果是条件,那么请解释.谢谢.

#include <stdio.h>
int main(int argc, char *argv[]){
int c;
while((c = getchar()) != EOF){
  printf("%d", c != EOF);
  putchar(c);
}
printf("\n%d\n", c != EOF);
}
Run Code Online (Sandbox Code Playgroud)

c ascii character eof getchar

3
推荐指数
1
解决办法
82
查看次数

标签 统计

c ×10

getchar ×10

ascii ×2

io ×2

character ×1

eof ×1

internals ×1

printf ×1

while-loop ×1