【发布时间】:2022-01-03 00:13:23
【问题描述】:
我是 C 新手,我正在尝试在一行中扫描两个 char 变量。
我使用了#define _CRT_SECURE_NO_WARNINGS,因为我必须这样做。
这是让我烦恼的一段代码:scanf_s("%c-%c", &x,1, &y,1);
当输入 2 个字符时,它看起来像这样 ---> e-f 或 a-b
另外,我只需要丢失scanf_s 并使其变为scanf。
对我来说有点奇怪的另一件事是,在我输入两个字符并稍后执行操作后,我将 x 和 y 的值重置为 0,并且需要再次输入它们。但是,当我输入它们时,我会得到完全不同的值。
这是我到目前为止编写的全部代码。任务:输入 2 个字母并按输入中指定的顺序打印它们,例如a-c --> ABC 或 c-a --> cba
#include<stdio.h>
#define MAX 100
int main(){
char niz[MAX];
char kraj[MAX] = {0};
int razlika;//difference
char x, y;
int i;
char trenutniznak; //current character
int stoppolje=0;//stop field
int temp = 0;
while (1)
{
scanf_s("%c-%c", &x,1, &y,1);
if (x == '.' || y == '.')
{
return 0;
}
else if (y > x)//od pocetka do kraja
{ //(from start to end )
razlika = y - x + 1;
for (i = stoppolje+1, trenutniznak=x; i <= razlika; i++, trenutniznak++)
{
niz[i] = trenutniznak;
temp = i;
}
stoppolje = temp; // polje na kojem je zadnji znak
//(the field where the last character is )
x = 0;
y = 0;
razlika = 0;
}
else
{
printf("\n");
return 0;
}
}
}
【问题讨论】:
-
不要做
while(1)。用while( scanf(" %c-%c", &x, &y) == 2 ){ ...检查scanf返回的值。注意格式字符串中的前导空格并理解它的作用。 -
scanf_s("%c-%c", &x, 1, &y, 1);的等效项是scanf("%c-%c", &x, &y);,但请注意在 this comment 中添加了一个空格。 -
请注意,通过强迫您使用
scanf,您的教练会强迫您做相当于学习如何骑方形辅助轮的自行车。现在事实上,一旦你学好 C,你就再也不会使用scanf了。对于非常简单的输入,它充其量是有用的。您在这里尝试做的事情并不是“非常简单”,而且或多或少完全是在浪费时间。所以,尽你所能安抚你的近视教练,但不要以为你正在学习任何有用的东西。 -
如果
scanf()不是必需的,请考虑使用 fgets(),然后生成字符串数组,例如char buf[4];,数组元素buf[0]、buf[1]和buf[2]将包含例如“a”、“-”和“c”。 (buf[3]将包含nul字符。)这些只是恰好在 ASCII 字符范围内的数值,但也可以作为数字进行逻辑操作,例如if(buf[0] > buf[2])(//do something)