【发布时间】:2015-05-23 23:14:25
【问题描述】:
抱歉,我想不出更好的标题 我在处理输入时遇到问题 这是我的测试代码,它将输入输入到一个字符串数组中,然后再次在屏幕上打印,非常简单
第一个测试代码正常工作
#include <stdio.h>
int main()
{
int i, index;
char d, c[20];
scanf("%d", index);
for(i=0; i<index; i++){
*(c+i) = getchar();
if (*(c+i)=='$')
break;
}
printf("the string is %s", c);
return 0;
}
第二个测试代码,我确实使用了指针,但是 c[i] 而不是程序没有运行。这很奇怪,因为 *(c+i) 和 c[i] 是等价的
我变了
*(c+i) = getchar(); // (0)
if (*(c+i)=='$')
到
c[i] = getchar(); // (1)
if (c[i]=='$')
或
c[i] = getchar(); // (2)
if (*(c+i)=='$')
或
*(c+1) = getchar(); // (3)
if (c[i]=='$')
(3) 工作正常,没有发生任何问题,但在(1) 和(2) 中,输出只是输入的第一个字符,无论字符串输入多长时间
例如:输入 asdads$
输出:a
所以问题出在 getchar() 代码中,使用指针和数组的直接元素来获取输入之间存在差异,但我不知道这里有什么问题
我将这个问题称为“A”,因为我在使用 scanf 和 getchar 尝试不同类型的代码时遇到了几个问题
现在我将每种情况下的 getchar() 更改为 scanf
(0)(1)(2)(3):问题 A 发生。现在它们都不能与 scanf 一起正常工作。使用 getchar,至少 (0) 和 (3) 有效。
现在,我不是直接将数据输入到 c 中,而是将数据输入到 d 并将 d 的值传递给 c[i]
使用 d = getchar(),问题 A 发生在所有 4 种情况中。 scanf 给出相同的结果
奇怪的是当我按回车时,程序自动中断并输出到屏幕
这只是一个测试,但这是我正在处理的当前问题
int z;
printf("continue? [1=yes/0=no] ");
scanf("%d", &z);
switch (z){
case 1: printf("next info is: ");
scanf("%d", &x);
break;
case 0: *end = '\0';
break;
}
这项工作很好,使用带有 %d 的 scanf 是可以的,它等待我点击 1 或 0 以继续该过程。然而,问题发生在这两个预期执行相同的代码上。他们不等我打y/n而是直接走到最后
char z;
printf("continue? [y/n] ");
z=getchar(); // using getchar
if(z=='y'){
printf("next info is: ");
scanf("%d", &x);
}
else{
*end = '\0';
}
和
char z;
printf("continue? [y/n] ");
z=getchar();
switch(z=='y'){
case 1: printf("next info is: ");
scanf("%d", &x);
break;
case 0: *end = '\0';
break;
}
所以我不知道我使用的代码有什么问题,为什么使用指针获取数据与直接使用数组不同。
【问题讨论】:
-
scanf("%d", index);不正确。 -
scanf("%d", ...);不消耗在 整数之后输入的'\n'。还在stdin等待下一次输入操作。