相关疑难解决方法(0)

我可以用什么代替scanf进行输入转换?

我经常看到人们不鼓励其他人使用scanf并说有更好的选择。但是,我最终看到的只是“不要使用scanf“这里是正确的格式字符串”,并且从来没有提到“更好的替代方案”的任何示例。

例如,让我们看一下这段代码:

scanf("%c", &c);
Run Code Online (Sandbox Code Playgroud)

这将读取最后一次转换后留在输入流中的空白。通常建议的解决方案是使用:

scanf(" %c", &c);
Run Code Online (Sandbox Code Playgroud)

还是不使用scanf

由于scanf不好,用于转换scanf通常无需使用即可处理的输入格式(例如整数,浮点数和字符串)的ANSI C选项有哪些scanf

c scanf

124
推荐指数
7
解决办法
8381
查看次数

使用fflush(stdin)

因此,谷歌快速搜索fflush(stdin)清除输入缓冲区会发现许多网站警告不要使用它.然而,这正是我的CS教授教授课程的原因.

使用有多糟糕fflush(stdin)?即使我的教授正在使用它并且似乎完美无缺地工作,我是否真的应该放弃使用它?

c stdin fflush

69
推荐指数
6
解决办法
4万
查看次数

如何在C++中模拟按键

我想知道如何在C++中模拟一个关键的抑郁症.如有代码,当我运行程序时,它按下字母"W"键.我不想在控制台窗口中显示它我只想在每次单击文本字段时显示"W"键.谢谢!

注意:我不是想制作垃圾邮件发送者.

c++ windows keyboard input

20
推荐指数
2
解决办法
6万
查看次数

我无法冲洗stdin

如何刷新stdin

为什么它不能在以下代码片段中工作?

#include <string.h>
#include <stdio.h>
#include <malloc.h>
#include <fcntl.h>

int main()
{
        int i=0,j=0, sat;
        char arg[256];
        char * argq;
        argq = malloc(sizeof(char)*10);

        printf("Input the line\n");
        i=read(0, arg, sizeof(char)*9);
        arg[i-1]='\0';
        fflush(stdin);

        i=read(0, argq, sizeof(char)*5);
        argq[i-1]='\0';

        puts(arg);
        puts(argq);

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

现在,如果我将输入作为11个字符,则只应读取9个,但是stdin中剩余的两个字符不会被刷新并在argq中再次读取.为什么?

输入:123 456 789

产出:123 456 89

为什么我将这89作为输出?

c stdin fflush

17
推荐指数
3
解决办法
5万
查看次数

fflush()在Linux中不起作用

我在Linux GCC中使用了fflush()但它没有用.该功能有其他替代方案吗?这是我的代码:

#include<stdio.h>
void main()
{
  char ch='y';
  while(ch=='y')
  {
    int a;
    printf("Enter some value:");
    scanf("%d",&a);
    fflush(stdin);
    printf("Do you want to continue?");
    scanf("%c",&ch)
  }
Run Code Online (Sandbox Code Playgroud)

我得到的输出是:

Enter some value: 10
Run Code Online (Sandbox Code Playgroud)

然后程序结束.就这样.我在Linux中可以做什么?有替代功能吗?

c linux gcc

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

如何在fgets循环中正确刷新stdin

我已经找到了while((c = getchar()) != '\n' && c != EOF)在这里使用清除stdin 几次的例子,并尝试在通过fgets获取输入的循环中使用它.我需要刷新,因为循环从最后一个输入获取\n字符并再次运行它.

那么现在发生的是我现在必须按两次输入.为什么会发生这种情况,我该如何解决这个问题呢?

#define BUFFER_LIMIT 50
do
{
  int c;
  while ((c = getchar()) != '\n' && c != EOF);

  printf("console> ");
  fgets(input_buffer, BUFFER_LIMIT-1, stdin);

  if(do_something(input_buffer))
    break;
} while(strncmp(input_buffer, "quit", 4) != 0);
Run Code Online (Sandbox Code Playgroud)

c stdin

6
推荐指数
2
解决办法
8850
查看次数

在 while 循环中等待 C 中的 Enter 键?

我正在编写一个 C 程序,我需要等待用户按任意键才能继续。当我使用getchar();它时,它等待Enter按键被按下。但是当我在while循环中使用它时,它不起作用。如何让我的代码等待按下任意键才能继续循环?

这是我的代码示例。我正在使用 GNU/Linux。

#include <stdio.h>
#include<stdlib.h>
int main()
{
    int choice;
    while(1) {
        printf("1.Create Train\n");
        printf("2.Display Train\n");
        printf("3.Insert Bogie into Train\n");
        printf("4.Remove Bogie from Train\n");
        printf("5.Search Bogie into Train\n");
        printf("6.Reverse the Train\n");
        printf("7.Exit");
        printf("\nEnter Your choice : ");
        fflush(stdin);
        scanf("%d",&choice);

        switch(choice)
        {
            case 1:
                printf("Train Created.");
                break;
            case 2:
                printf("Train Displayed.");
                break;
            case 7:
                exit(1);
            default:
                printf("Invalid Input!!!\n");
        }

        printf("Press [Enter] key to continue.\n");
        getchar();
    }

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

c keypress while-loop getchar

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

为什么Scanf在拍摄角色时工作很奇怪

程序说明: - 我编写了一个程序,该程序从用户输入无限的字符输入.时间并打印输入的输入.这是程序

#include<stdio.h>
int main()
{
int i=1;
char a;
  while (i!=0)
  {

   printf("Enter %d th value\n",i);
   scanf("%c",&a);
   printf("Entered input is %c\n",a);
    i++;
  }

}
Run Code Online (Sandbox Code Playgroud)

上述方案的产出: -

Enter 1 th value
q
Entered input is q
Enter 2 th value
Entered input is 

Enter 3 th value
r
Entered input is r
Enter 4 th value
Entered input is 

Enter 5 th value
g
Entered input is g
Enter 6 th value
Entered input is 

Enter 7 th value …
Run Code Online (Sandbox Code Playgroud)

c whitespace while-loop

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

从控制台读取正好 50 个字符(49 +1 表示 null),仅忽略所有初始空格

我如何从控制台中的用户输入中读取恰好 50 个字符(49,+1 表示空),忽略所有初始空格(如第一个单词之前),但保留其后的 49 个字符,包括所有空格?

另外,如果用户输入少于 49 个字符并输入换行符,它只会处理该内容(换行符之前的所有内容都会忽略初始空格)。

我尝试使用:

char name[50];
scanf("%49s",name);
Run Code Online (Sandbox Code Playgroud)

然而,这似乎忽略了所有空白;所以,如果我的名字是这样的:“Mark Smith”,它将无法正确处理。

c string input

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

在C中进行基本检查时出现奇怪的数学错误

对于一个简单的程序,分配是创建一个接受十位数电话号码的程序,然后将其读回给用户.需要进行控制以确保:

  1. 第一个数字不是0.

  2. 输入的数字是十个数字.

错误检查似乎很简单; 我想使用while循环来确保数字的范围在1000000000和9999999999之间可以解决,并且根据独立的计算,它似乎应该.

while ((MDN - valueCheck < 0) || (MDN > 9999999999)) {
  printf("Entered number is not ten digits. Please re-enter.\n");
  scanf("%d", &MDN);
}
Run Code Online (Sandbox Code Playgroud)

这两个MDNvalueChecklong long类型变量(这样的范围内可以走过去2,147,483,647; IIRC很长很长为64位),但他们似乎仍然被列为32位整数,如进入2147483647出来就好了(或者更低的电话号码作品同样),但输入2,147,483,648(或以上任何内容)会使其显示为-2147483647.

与上述相关,输入一个更高的数字,不仅值环绕32位整数的范围,而且printf循环后语句打印的电话号码总是等于输入的数字减去两倍的限制32位整数.

是否有任何简单的方法使程序实际工作在64位数字,就像我想要的那样?如果我可以使数学正常工作,该算法似乎很可靠.

c

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

标签 统计

c ×9

stdin ×3

fflush ×2

input ×2

while-loop ×2

c++ ×1

gcc ×1

getchar ×1

keyboard ×1

keypress ×1

linux ×1

scanf ×1

string ×1

whitespace ×1

windows ×1