gpt4 book ai didi

c - scanf 和 printf 未按顺序执行

转载 作者:行者123 更新时间:2023-11-30 20:09:30 24 4
gpt4 key购买 nike

我正在编写一个简单的代码来获取用户的输入。这是我的代码:

int main() {

char *start = NULL;
char *end = NULL;
char in, out, shift;

while (strcmp(start, "acc") != 0) {
printf("before start");
scanf("%ms ", &start);

if(strcmp(start, "acc") != 0) {
printf("in if");
scanf("%c %c %c %ms", &in, &out, &shift, &end);
printf("%s", start);
printf("%c", in);
printf("%c", out);
printf("%c", shift);
printf("%s", end);
}
}
}

输入总是这样的:

string char char char string

第一个和最后一个任意长度的字符串(这就是我使用 %ms 的原因)

代码工作正常并执行其必须执行的操作,唯一的问题是我想检查我的 start 字符串是否等于 acc,如果是,跳过这些代码行。

当我将 acc 插入 scanf("%ms ", &start); 并按 Enter 键时,我的代码仍然等待插入所有其他输入,一旦它们全部插入,它会检查所有条件,进行所有打印,然后结束。

问题是什么?

最佳答案

使用未初始化的指针 start,do/while 循环更适合在使用 strcmp 测试变量之前允许输入该变量。
我不确定 %ms 是否为每次调用分配一个新的缓冲区。由于缓冲区不需要初始化,我怀疑它分配了一个新的缓冲区。为了避免内存泄漏,请在需要之前和不再需要之后释放缓冲区。
%ms 之后的空格将消耗所有尾随空格。要终止扫描,需要输入一些非空格。将该尾随空格移至第一个 %c

之前的下一个 scanf
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int main() {

char *start = NULL;
char *end = NULL;
char in, out, shift;

do {
if ( start) {
free ( start);
start = NULL;
}
printf("before start: ");
fflush ( stdout);
scanf("%ms", &start);

if(strcmp(start, "acc") != 0) {
if ( end) {
free ( end);
end = NULL;
}
printf("in if: ");
fflush ( stdout);
scanf(" %c %c %c %ms", &in, &out, &shift, &end);
printf("%s", start);
printf("%c", in);
printf("%c", out);
printf("%c", shift);
printf("%s", end);
}
} while ( strcmp(start, "acc") != 0);

if ( start) {
free ( start);
start = NULL;
}
if ( end) {
free ( end);
end = NULL;
}

return 0;
}

关于c - scanf 和 printf 未按顺序执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51561880/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com