我似乎无法弄清楚这段代码出了什么问题:
#include <stdio.h>
#include <ctype.h>
#include <string.h>
#include <stdlib.h>
#define MAX 100
#define TRUE 1
#define FALSE 0
char sect_cat;
char customer_name[MAX];
char customer_number[MAX]; /* error handling is easier */
int prev_unit = 0;
int current_unit = 0;
int consumed = 0;
int set = FALSE;
float init_bill;
float tax;
float total_bill;
void get_userinfo()
{
printf("Enter sector category: ");
scanf("%c", §_cat);
printf("Enter customer name: ");
fflush(stdin);
scanf("%sn", &customer_name);
set = FALSE;
while (set == FALSE)
{
printf("Enter customer number: "); …Run Code Online (Sandbox Code Playgroud) 我的代码只需要5个值作为输入.我究竟做错了什么?
#include<stdio.h>
#include<stdlib.h>
int main()
{
char arr[3][3];
int i,j,n;
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
{
scanf("%c",&arr[i][j]);
}
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我该如何纠正呢?
我想要一个菜单,你可以从中选择一些动作.
问题是,当我们选择一个,并按下"返回"键时,将跳过应该是下一步的用户输入命令.这是为什么 ?
代码是:
#include <stdio.h>
#include <string.h>
int main(int argc, char *argv[])
{
int choice;
do
{
printf("Menu\n\n");
printf("1. Do this\n");
printf("2. Do that\n");
printf("3. Leave\n");
scanf("%d",&choice);
switch (choice)
{
case 1:
do_this();
break;
case 2:
// do_that();
break;
}
} while (choice != 3);
return(0);
}
int do_this()
{
char name[31];
printf("Please enter a name (within 30 char) : \n");
gets(name); // I know using gets is bad but I'm just using it
// fgets(name,31,stdin); // gives the …Run Code Online (Sandbox Code Playgroud) #include <stdio.h>
int main (void)
{
int T, y, z;
scanf ("%i\n", &T);
for (T; T > 0 ; --T)
{
scanf ("%i\n", &y);
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
如果输入4,是否应该再输入4个?相反,它允许我输入5个整数!也尝试过其他数字.
这可能是一个简单的问题,但我搜索了很多,仍然没有想出来.我用gcc编译下面的剪辑代码并从终端运行程序.在正确的情况下,它允许输入int和char,但它不允许.它不等待进入char?
这里的任何人都可以帮助我.提前致谢!
#include <stdio.h>
int main()
{
char c;
int i;
// a
printf("i: ");
fflush(stdin); scanf("%d", &i);
// b
printf("c: ");
fflush(stdin); scanf("%c", &c);
return 0;
Run Code Online (Sandbox Code Playgroud)
}
为什么fflush()不安全?我被告知它显示未定义的行为?如果是这样,fflush()的替代方法是什么?
当我多次使用scanf时,程序不会等待另一个输入.相反,它退出
我了解到我可以在scanf函数中的转换说明符之前放置一个空格 - 是的,这解决了问题,我想这与输入流有关,即 - 如果它是输入流中的换行符,scanf将消耗它立刻.
scanf(" %f", &value);
Run Code Online (Sandbox Code Playgroud)
但如果是这样 - 为什么我不能使用fflush(stdin)呢?我试过但它不起作用.
#include <stdio.h>
int main(void)
{
float value;
char ch;
printf("input value: ");
scanf("%f", &value);
fflush(stdin);
printf("input char: ");
scanf("%c", &ch);
return 0;
}
Run Code Online (Sandbox Code Playgroud) 我的 Windows 程序(使用 MSYS2 MINGW64 编译)stdout以大块输出其数据。使用aprintf()的调用\n无法正确刷新输出。
作为这个问题的变体,在什么条件下printf()不冲洗?
例如,以下代码在 MSYS2 MINGW64 上的块中输出:
#include <stdio.h>
int main() {
while(1) {
printf("test\n");
Sleep(1);
}
return 0;
}
Run Code Online (Sandbox Code Playgroud) 我是一名软件工程专业的学生,我正在休假,为了在下学期学习更好,我一直在编写各种控制台应用程序来练习.但是我遇到了一个问题,我需要从用户那里得到整数输入.我一直在使用fgets来获取字符串stdin然后使用sscanf来获取整数(已经工作正常)但是如果用户输入的数量超过了我的缓冲区大小,则会在流中保留尾随字符(包括跳过我的下一个调用的换行符)fgets).我环顾四周,发现大多数人似乎都认为while(getchar() != '\n');这会导致我出现问题,因为如果没有换行字符,就会发生不必要的输入扫描.
例:
int ch;
char* buffer = (char*)malloc(BUFSIZ*sizeof(char));
while((ch = getchar()) != '\n' && ch != EOF);
fgets(buffer,BUFSIZ*sizeof(char),stdin);
Run Code Online (Sandbox Code Playgroud)
如果缓冲区不是太小而流中没有尾随字符,则会getchar()导致输入不必要.
输出:
A
A
You typed A
Intended Output:
A
You typed A
Run Code Online (Sandbox Code Playgroud)
我希望我说得够清楚,我感谢任何帮助.
当我运行以下代码时:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int n;
char y;
printf("Message\n");
fscanf(stdin, "%c", &y);
printf("Message\n");
fscanf(stdin, "%c", &y);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我明白了:
Message
{enter character}
Message
Run Code Online (Sandbox Code Playgroud)
问题是,即使有2个scanf函数,也不会要求我输入两次字符.输出应该是这样的:
Message
{enter character}
Message
{enter character}
Run Code Online (Sandbox Code Playgroud)
我也有这个问题getc():
#include <stdio.h>
#include <stdlib.h>
int main()
{
int n;
char y;
printf("Message\n");
y=getc(stdin);
printf("Message\n");
y=getc(stdin);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
另外,fflush()没有帮助:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int n;
char y;
printf("Message\n");
y=getc(stdin);
fflush(stdin);
fflush(stdout);
printf("Message\n");
y=getc(stdin);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我试图fflush …