#include <stdio.h>
int main() {
char read = ' ';
while ((read = getchar()) != '\n') {
putchar(read);
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我的输入是f(当然是输入).我希望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指向的位置吗?但是输出只显示没有任何特殊字符的最终字符串.有人能解释为什么吗?
我有一些重复运行的代码:
printf(“您要继续吗?是/否:\ n”);
keepplaying = getchar();
在下一个我的代码正在运行时,它不会等待输入。我发现第二个时间的getchar使用'\ n'作为字符。我在说这是由于sdio有一些缓冲区,所以它保存了最后一个输入“ Y \ n”或“ N \ n”。
我的问题是,在使用getchar之前如何刷新缓冲区,这会使getchar等待我的回答?
有人可以解释一下为什么我看到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) 我正在关注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) 我在使用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) 我已经包含了一个使用getchar()下面的示例程序,供参考(并非任何人都可能需要它),如果您愿意,可以随意解决它的问题.但我的问题是:
程序调用时究竟发生了什么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) 从我之前的帖子中,我发现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时,应该打印第2行getchar.但它最后打印,意味着所有getchar()s同时执行 - 这很奇怪.
- 程序是否逐行执行?即在第三个getchar之后,printf()应该可以工作.但是当所有的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编程语言书,在下面给出的代码中,我不知道如何在这里获得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)