标签: getchar

使用getchar()和-O3的奇怪行为

我有这两个功能

    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)

c c++ getchar

0
推荐指数
1
解决办法
558
查看次数

从C中读取文件中的输入

好的,所以我有一个输入文件,我计算每行中单词和字符的数量是否成功.当我使用下面的代码到达行尾时,它退出循环并且只读取第一行.如何继续下一行输入以继续该程序?

编辑:我必须分别解析每一行,所以我不能使用EOF

while( (c = getchar()) != '\n')
Run Code Online (Sandbox Code Playgroud)

c getchar

0
推荐指数
1
解决办法
8802
查看次数

这个C程序不起作用

我从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 console-application getchar

0
推荐指数
1
解决办法
433
查看次数

为什么这个C代码有意想不到的行为

我编写了以下简单的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)

c putchar getchar

0
推荐指数
1
解决办法
148
查看次数

在文本中将空格限制为只有一个 - c

我正在阅读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

0
推荐指数
1
解决办法
389
查看次数

getchar()跳过C中的所有其他char

我在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 visual-studio-2012

0
推荐指数
1
解决办法
1156
查看次数

使用getchar()来存储数字

我有一个任务,我应该在C中创建一个简单的算术计算器,它接受一个数字,一个运算符和一个第二个数字的输入并执行操作并输出它.听起来很简单吧?

我只限于使用getchar()和putchar()来输入数字.这意味着我必须一次读取整个输入一个字符...而我很困惑我将如何读取一个数字的两个字符(例如91的"9"和"1")作为一个数字.如果从右到左阅读getchar(),这将是一个不同的故事.但不幸的是,它不是......

我会感激任何指针!

c math calculator putchar getchar

0
推荐指数
1
解决办法
4230
查看次数

Printf等待进入

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值,就像这样

在此输入图像描述

.有人可以解释这种行为吗?

c printf getchar

0
推荐指数
1
解决办法
256
查看次数

需要一步一步地解释"while((ch = getchar())!='\n'&& c!= EOF;"

我知道这个问题已被提出; 但它没有一步一步地解释,或者彻底解释它是如何执行的; 所以,假设我有这部分代码:

char ch;
while((ch = getchar()) != '\n' && ch != EOF);
Run Code Online (Sandbox Code Playgroud)

getchar()是否将单个字符读入ch变量1st,然后进行比较,即ch != '\n' && ch != EOF保留换行转义序列,但实际上不是ch变量?如果是这样,这是不是意味着它会无限循环直到它遇到换行转义序列/ EOF?如果遇到换行转义序列,它是否存储在ch变量中?如果没有,怎么回事?

c stdin getchar

0
推荐指数
1
解决办法
309
查看次数

如何getchar()函数输出

我想了解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。

c++ getchar

0
推荐指数
1
解决办法
60
查看次数