【发布时间】:2019-10-09 16:56:48
【问题描述】:
我正在用 C 语言设置一个程序,该程序在用户输入转换和单元格的数量时操作字符串,以及他们想要操作的字符串以及起始字符串和“初始字符串”
用户将逐行输入信息,所以我决定使用“scanf”,但是,我的所有变量似乎都可以工作,除了转换的整数,尽管用户输入,它一直被赋值为 0。
int main()
{
int num;
int changes;
char string[10];
char startingString[25];
scanf("%d", &num);
scanf("%d", &changes);
scanf("%s", string);
scanf("%s", startingString);
printf("number: %d\n",num);
printf("Changes: %d\n",changes);
printf("String: %s\n",string);
printf("String Before: %s\n", startingString);
}
input:
20
10
teststring
goodbye
output:
20
0 <----
hello
goodbye
【问题讨论】:
-
如果您检查了
scanf的返回值,将会有所帮助。在所有情况下都应该是 1。 -
不应该指定和消费换行符吗?人们过于依赖
scanf。读取原始缓冲区并进行解析,即使使用strtok,也可能是一种更好的方法。 -
@tadman scanf 跳过空格,所以换行应该不是问题
-
如果这是
C,您需要#include相应的标头。如果不包含标头,程序的行为可能会发生变化。 -
如果在
main末尾添加return 0还会出现这种情况吗?
标签: c scanf undefined-behavior c-strings