我是C编程的新手。我正在尝试使用scanf in loop解决一个问题,但是问题是scanf在循环内仅运行一次。我的代码是:
#include <stdio.h>
#include <string.h>
int main()
{
int n;
int x=0;
scanf("%d", &n);
for (int i=1; i<=n; i++)
{
char stat[3];
scanf ("%s", stat);
if (strcmp(stat, "X++")==0)
x++;
else if (strcmp(stat,"++X")==0)
x++;
else if (strcmp (stat, "--X")==0)
x--;
else if (strcmp(stat, "X--")==0)
x--;
}
printf ("%d", x);
return 0;
}
为什么即使n为2、3或其他任何值,scanf也只运行一次?
答案 0 :(得分:3)
这可能是因为越界写破坏了变量n
的值。
您的缓冲区stat
的大小不足以存储3个字符的字符串,因为没有空间来存储终止空字符。
增加缓冲区大小并限制要读取的字符数,以确保安全。
检查读取是否成功将使其更安全。
char stat[3];
scanf ("%s", stat);
应该是
char stat[4];
if (scanf ("%3s", stat) != 1) return 1;