是a = getchar()相当于scanf("%c",&a);?
是putchar(a)等同于printf("%c",a);其中a是一个char变量?
我正在尝试编写一个简单的程序,要求用户从循环中的菜单中进行选择.我使用getchar()来获取输入,但是我注意到当我输入一个字符并按下'Enter'时,程序会产生两个循环(好像我按两次),一个char作为输入,另一个作为'Enter'作为输入.
我该如何解决?
我很难理解getchar().在以下程序中getchar按预期工作:
#include <stdio.h>
int main()
{
printf("Type Enter to continue...");
getchar();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
但是,在以下程序中,getchar不会产生延迟并且程序结束:
#include <stdio.h>
int main()
{
char command[100];
scanf("%s", command );
printf("Type Enter to continue...");
getchar();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我有以下的解决方法,这是有效的,但我不明白为什么:
#include <stdio.h>
int main()
{
char command[100];
int i;
scanf("%s", command );
printf("Type Enter to continue...");
while ( getchar() != '\n') {
i=0;
}
getchar();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
所以我的问题是:
1.在scanf做什么?为什么这样scanf做?
2.为什么我的工作在工作?
3.模拟以下Python代码的好方法是什么:
raw_input("Type Enter to continue")
Run Code Online (Sandbox Code Playgroud) 我正在阅读K&R的The C Programming Language,并对putchar和getchar感到困惑.我制作了一个程序,你输入10个字符,程序将它们打印回屏幕.
#include <stdio.h>
int main()
{
int i;
int ch;
for(i = 0; i < 10; i++)
{
printf("Enter a single character >> ");
ch = getchar();
putchar(ch);
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我希望得到这样的输出:
Enter a single character >> a
a
Enter a single character >> b
b
Run Code Online (Sandbox Code Playgroud)
...等等10次,但这是我得到的输出:(进入2个字符后我停止了)
Enter a single character >> a
aEnter a single character >>
Enter a single character >> b
bEnter a single character >>
Enter a single character >>
Run Code Online (Sandbox Code Playgroud)
不确定为什么我的输入字符与固定字符串组合并被输出.
另外,我不太清楚为什么使用int来存储字符.
我已经在这个工作了2个小时而且我被卡住了...我在网上找到了答案,但这不会帮助我学习我显然缺少的概念.
提示:编写程序将其输入复制到其输出,替换每个选项卡\t,每个退格键\b和每个反斜杠\\.这使得标签和退格以明确的方式可见.
这是我提出的,它没有替换a tab或\与指示putchar,它只是在它前面添加它.(我没有做退格,因为我无法真正输入退格...):
这就是我阅读代码的方式.我错过了什么?:
"有一些整数c.c等于输入.当输入不等于文件结束时继续.如果输入是tab然后输出\t.如果输入\则输出\\.输入输出到控制台."
int c;
while((c=getchar())!=EOF)
{
if(c=='\t')
{
putchar('\\');
putchar('t');
}
if(c=='\\')
{
putchar('\\');
putchar('\\');
}
putchar(c);
}
Run Code Online (Sandbox Code Playgroud) 我有一个非常简单的代码将大写转换为小写:
#include <stdio.h>
int main()
{
char c;
int i=0;
for (i=0;i<10;i++){
c=getchar();
c=c-'A'+'a';
printf("%c\n",c );
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
但运行这个简单的代码总是*在输出时有一个额外的字符.它打印下面的char *.看一看:
D
d
*
D
d
*
E
e
*
Run Code Online (Sandbox Code Playgroud)
这是从哪里来的?
这是一个非常基本的C问题,来自Kernighan和Ritchie的第18页.
我编译了这个非常简单的代码来计算从键盘输入的字符:
#include <stdio.h>
/* count characters in input; 1st version */
main()
{
long nc;
nc = 0;
while (getchar() != EOF)
++nc;
printf("%1d\n", nc);
}
Run Code Online (Sandbox Code Playgroud)
这个编译很好,运行正常,并且表现得非常符合预期,即如果我输入"Hello World",当我按下CTRLD以给出EOF字符时,它返回值11 .
令我困惑的是,如果我犯了错误,我可以使用退格键删除字符并重新输入它们,它只返回终端在调用EOF时显示的字符数.
如果代码计算每个字符,包括特殊字符,如果我输入四个字符,删除两个,再输入另外两个,那么输出不应该是8个字符(4个字符+2个del + 2个字符),而不是4个字符?
我显然误解了C如何处理退格,以及代码如何/何时递增变量nc?
在示例中:
#include <stdio.h>
main()
{
long nc;
nc = 0;
while (getchar() != EOF)
++nc;
printf("%ld\n", nc);
}
Run Code Online (Sandbox Code Playgroud)
我不太明白.putchar()会把角色放出来,但为什么在EOF之后它会把所有的角色都放出来,它在哪里记住所有这些角色?谢谢.
我需要在程序中为getchar()添加一个超时函数.
我该怎么办,当我的程序到达指令getchar()时,它只会等待一段时间让用户进行击键,如果用户没有在给定的时间限制内进行击键,程序将"跳过"getchar()?
操作系统不支持conio.h库,因此kbhit不是一个选项.
为什么Ctrl+Z在下面的小程序中没有触发循环完成?
#include <stdio.h>
main()
{
int c;
while ((c = getchar()) != EOF)
{
//nothing
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
如果我输入:test^ZEnter,它不会跳出循环。
我发现了相关问题(此处和此处),但没有一个问题可以解释 Windows 下的 C(而不是 C++)。
注意:我在 Windows 8.1 上使用 Visual Studio 2015 PRE