#include<stdio.h>
int main()
{
printf("ok");
scanf("%d",6);
}
怎么实现先输入再打印?不改变两个函数的位置,可以更改函数
#include<stdio.h>
#define printf scanf
#define scanf printf
int main()
{
int a;
printf("%d", &a);
scanf("%d");
}
意思是先输入,再把输入进行打印吗?
两个函数的调用位置不变?
解决方案:
这个问题的根本原因是输入和输出的顺序问题,因此我们需要解决输入输出的顺序问题。由于不能改变两个函数的位置,我们需要在函数内部进行改变来解决这个问题。
我们可以使用缓冲区或者刷新缓冲区的方法来解决这个问题。在 C 语言中,当我们使用 scanf 函数或者 gets 函数输入字符串或其他数据时,有时会遇到缓冲区的问题。缓冲区是一个用来存储输入和输出数据的空间,数据在输入输出时都需要经过缓冲区。当我们输入数据时,数据会先被存储在缓冲区中,等到输入结束时,数据才会被送入程序中进行处理;而当我们输出数据时,数据也会先被存储在缓冲区中,等到缓冲区被填满或者程序结束时,数据才会被输出到屏幕或其他设备上。
因此,我们可以通过控制缓冲区来实现先输入再输出的顺序。具体来说,我们可以在输入数据后使用 getchar 函数或者 fflush 函数来清空缓冲区,然后再进行输出。这样就可以确保输出语句在输入语句之后运行了。
下面是修改后的代码:
#include <stdio.h>
void TongJi(char s[]) {
int ZiMu = 0, KongGe = 0, ShuZi = 0, QiTa = 0, i;
for (i = 0; s[i] != '\0'; i++) {
if (s[i] == 32) KongGe++;
else if ((s[i] >= 48) && (s[i] <= 57)) ShuZi++;
else if (((s[i] >= 97) && (s[i] <= 122)) || ((s[i] >= 65) && (s[i] <= 90))) ZiMu++;
else QiTa++;
}
printf("空格:%d;数字:%d;字母:%d;其他:%d。\n", KongGe, ShuZi, ZiMu, QiTa);
}
int main() {
char s[100];
printf("请输入字符串:");
gets_s(s);
getchar(); // 清空缓冲区
TongJi(s);
return 0;
}
在输入数据后,我们加入了一个 getchar 函数来清空缓冲区。由于 getchar 函数只读取缓冲区中的一个字符并将其从缓冲区中删除,因此我们可以使用一个简单的 getchar 函数来清空缓冲区。
当然,我们也可以使用 fflush 函数来清空缓冲区。fflush 函数的用法如下:
fflush(stdin); // 清空输入缓冲区
fflush(stdout); // 清空输出缓冲区
在这里,我们可以使用 fflush(stdin) 来清空输入缓冲区。但需要注意的是,fflush(stdin) 并不是标准 C 函数,因此在某些编译器中可能会出现问题。
综上,我们可以通过加入 getchar 函数或者 fflush 函数来解决输出语句在输入语句之前运行的问题。这样就可以在不改变函数位置的情况下实现先输入再输出的顺序了。