我有这两个功能
void set_dram_channel_width(int channel_width){
printf("one\n");
getchar();
}
void set_dram_transaction_granularity(int cacheline_size){
printf("two\n");
getchar();
}
//output:
one
f //my keyboard input
two
one
f //keyboard input
two
one
f //keyboard input
//No more calls
Run Code Online (Sandbox Code Playgroud)
然后我将功能更改为:
void set_dram_channel_width(int channel_width){
printf("one\n");
}
void set_dram_transaction_granularity(int cacheline_size){
printf("two\n");
getchar();
}
//output
one
two
f //keyboard input
//No more calls
Run Code Online (Sandbox Code Playgroud)
这两个函数都是由外部代码调用的,两个程序的代码是相同的,只需更改getchar()即可获得这两个不同的输出.这是可能的还是我的代码中有些东西是真的错了?
谢谢
这是我用GDB获得的输出**
对于第一个代码
(gdb) break mem-dram.c:374
Breakpoint 1 at 0x71c810: file build/ALPHA_FS/mem/dramsim/mem-dram.c, line 374.
(gdb) break mem-dram.c:381
Breakpoint 2 at 0x71c7b0: file build/ALPHA_FS/mem/dramsim/mem-dram.c, line 381.
(gdb) …Run Code Online (Sandbox Code Playgroud) 好的,所以我有一个输入文件,我计算每行中单词和字符的数量是否成功.当我使用下面的代码到达行尾时,它退出循环并且只读取第一行.如何继续下一行输入以继续该程序?
编辑:我必须分别解析每一行,所以我不能使用EOF
while( (c = getchar()) != '\n')
Run Code Online (Sandbox Code Playgroud) 我从K&R复制了以下C代码.如果代码当前是用户键入的最长行,则该代码应该打印一行.这是代码:
#include <stdio.h>
#define MAXLINE 1000
int max;
char line[MAXLINE];
char longest[MAXLINE];
int getline();
void copy();
int main(){
int len=0;
extern int max;
extern char longest[];
max = 0;
while((len = getline()) > 0)
if (len > max){
max = len;
copy();
}
if (max > 0){
printf("%s", longest);
}
return 0;
}
int getline(){
int c;
int i;
extern char line[];
for(i = 0; i < MAXLINE-1
&&(c=getchar())!=EOF&&c!='\n';++i)
line[i] = c;
if(c=='\n'){
line[i]=c;
++i;
}
line[i] = '\0';
return …Run Code Online (Sandbox Code Playgroud) 我编写了以下简单的C代码,它编译并运行良好.但它的行为方式我不明白.我输入一个字符,然后将其打印在屏幕上.但是当我按下返回键时,它会打印整行.因此,如果我键入字母a,b和c,abc将在命令行上打印两次.这是为什么这样做的?
#include <stdio.h>
int main(){
int c;
while((c=getchar())!=EOF){
putchar(c);
}
return 0;
}
Run Code Online (Sandbox Code Playgroud) 我正在阅读K&R,问题是:编写一个程序将其输入复制到其输出中,用一个空格替换一个或多个空格的每个字符串.在我看来,我想我知道我需要做什么,设置一个布尔值来知道我什么时候在一个空间.我尝试过但没有成功.我发现这个代码并且它有效,我正在努力弄清楚是什么阻止了空间被写入.我想我可以拥有它,但我需要澄清.
#include <stdio.h>
int main(void)
{
int c;
int inspace;
inspace = 0;
while((c = getchar()) != EOF)
{
if(c == ' ')
{
if(inspace == 0)
{
inspace = 1;
putchar(c);
}
}
/* We haven't met 'else' yet, so we have to be a little clumsy */
if(c != ' ')
{
inspace = 0;
putchar(c);
}
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我创建了一个文本文件,文本内容如下:
so this is where you have been
Run Code Online (Sandbox Code Playgroud)
在"这个"'s'之后,状态变为1,因为我们在一个空间中.空间被写入并读取下一个空格.所以现在我们输入:
while((c = getchar()) != EOF)
{
if(c == …Run Code Online (Sandbox Code Playgroud) 我在C中完全使用getchar()已经有一段时间了.在这种情况下,我试图读取一行并将该行的char放入数组中.但是,在将getchar()分配给数组时,它会跳过一些字符.
例如,输入"它会相互跳过",输出是...... \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n (\n只是代表新行.)
int N = 0;
char message[80] = {};
do
{
message[N] = getchar();
N++;
printf("%c\n", message[N-1]);
}
while(getchar() != '\n');
Run Code Online (Sandbox Code Playgroud)
感谢您的时间,如前所述几乎任何时候我都尝试使用getchar()它总会给出一些意想不到的结果.我不完全理解函数如何读取char.
我有一个任务,我应该在C中创建一个简单的算术计算器,它接受一个数字,一个运算符和一个第二个数字的输入并执行操作并输出它.听起来很简单吧?
我只限于使用getchar()和putchar()来输入数字.这意味着我必须一次读取整个输入一个字符...而我很困惑我将如何读取一个数字的两个字符(例如91的"9"和"1")作为一个数字.如果从右到左阅读getchar(),这将是一个不同的故事.但不幸的是,它不是......
我会感激任何指针!
int kr=0;
int ss =0;
while ((kr=getchar()) != EOF){
if(kr != '\n')
{
ss++;
}
printf("%d\n",ss);
}
Run Code Online (Sandbox Code Playgroud)
使用此代码,printf正在等待,直到我按下enter然后同时打印所有顺序ss值,就像这样
.有人可以解释这种行为吗?
我知道这个问题已被提出; 但它没有一步一步地解释,或者彻底解释它是如何执行的; 所以,假设我有这部分代码:
char ch;
while((ch = getchar()) != '\n' && ch != EOF);
Run Code Online (Sandbox Code Playgroud)
getchar()是否将单个字符读入ch变量1st,然后进行比较,即ch != '\n' && ch != EOF保留换行转义序列,但实际上不是ch变量?如果是这样,这是不是意味着它会无限循环直到它遇到换行转义序列/ EOF?如果遇到换行转义序列,它是否存储在ch变量中?如果没有,怎么回事?
我想了解getchar()函数在这里如何工作?
我读取了getchar()返回的下一个字符stdin,或者EOF到达了文件末尾。
#include <iostream>
#include <cstdio>
using namespace std;
int main() {
int decimal;
while(!isdigit(decimal=getchar()));
cout<<decimal;
}
Run Code Online (Sandbox Code Playgroud)
我输入25。输出50。我不明白为什么?怎么给50。