Lệnh scanf trong ngôn ngữ lập trình C
ở đây mình có 2 thắc mắc muốn hỏi các tiền bối
Thứ nhất mình có đoạn code sau ( lấy từ daynhauhoc )
#include <stdio.h>
int main()
{
char x;
nhaplai:
printf("
*A*");
printf("
*B*");
printf("nhap gia tri ");
scanf("%c", &x);
if(x =='g')
{
goto nhaplai;
}
getchar();
}
Nhập g lần thứ 2 thì sẽ dừng và được giải thích là do enter đã nhảy vào biến x của lần nhập thứ 2 dẫn đến != g và kết thúc.
Nhưng mình có đoạn code thứ 2 như sau :
#include<stdio.h>
main()
{
char x;
printf ("x la ");
do
scanf("%c",&x);
while(x=='g');
printf("....");
}
Nhập g và kết thúc luôn, được giải thích là do đối với lệnh scanf này khi đọc kí tự ,thì với kí tự xuống dòng được coi là hợp lệ nên dẫn đến != g nên kết thúc.
đoạn code thứ 2 mình giải thích dựa trên sách còn đoạn code thứ nhất mình giải thích dựa trên nguồn trong nhóm và mình băn khoăn nếu với 2 cách giải thích trên thì ta thấy rằng enter của code 1 thì sẽ ảnh hưởng đến giá trị thứ 2 còn enter của thứ code 2 thì ảnh hưởng đến giá trị thứ nhất. Tiền bối nào có thể giải thích giúp mình với. Mình xin cảm ơn.
code nào vậy abnj mình ko hiểu
1: Bấm eđit
2: Thêm “```” ở trước và sau câu
vd :
include int main() { char x; nhaplai: printf("\n\n\t\t A"); printf("\n\n\t\t B"); printf("nhap gia tri "); scanf("%c", &x); if(x =='g') { goto nhaplai; } getchar(); }
mình vừa mới lập nick và đăng bài luôn nên chưa tìm hiểu mong các bạn giúp đỡ.
Hoặc bạn có thể dùng
[code]" Code c của bạn"
[/code]cảm ơn bạn, bạn có thể giúp mình câu hỏi trong topic được không ?
Thực tình là mình không hiểu ý bạn muốn hỏi gì. Giá trị thứ 2 và giá trị thứ nhất bạn đề cập đến là gì?
giá trị thứ 2 và thứ nhất tức là lần nhập g vào đầu tiên và lần nhập g vaò thứ 2 đó bạn
Đọc lại mấy lần và mình vẫn chưa hiểu bạn nói gì. Mình chỉ muốn nói thế này:
Thế thôi, chả có kí tự enter liên quan gì ở code thứ 2.
bạn ơi ở code thứ 2 khi nhập g vào thì vẫn thỏa mãn điều kiện vòng lặp mà,nên ko thể kết thúc vòng lặp do như vậy được, và ý mình giải thích ở đây là do lênh scanf trong code thứ 2 đã cho enter là kí tự hợp lệ dẫn đến giá trị nhập vào là khác g ấy. Code 2 mình ko chép ai bạn ah
Do code bạn lởm. Bạn có thể thấy, mình nhập cái gì cũng bay ra khỏi while hết.
Nếu muốn kiểm tra x, hãy đưa
if(x == 'g')
vào trong.2 code mình đều chạy được mà bạn
ko phải thế bạn ơi …
mình hiểu vòng lặp do while như sau:
do : thực hiện hành động sau đó while kiểm tra điều kiện
nếu điều kiện true thực hiện tiếp vòng lặp, false thì kết thúc mà
Chẳng lẽ mình hiểu vậy sai ah bạn
thì ở đây nhập các giá trị khác g đương nhiên là ko thỏa mãn rồi ,còn nhập g ko thỏa mãn là do phím enter lệnh scanf nó hiểu đó là một kí tự hợp lệ.
Ok, mình sai, mình nhìn code sai vì code của bạn văng while ra. Với lại mình không code quen do while.
Nhập g thì liên quan gì đến phím enter hả bạn? Bạn chỉ đọc 1 kí tự thôi mà?
ah cái này là mình đọc sách ban ah “scanf khi đọc kí tự thì nó cho các kí tự như dấu cách, tab, enter là hợp lệ hết” nên khi nhập g rồi nhấn enter thì mình nghĩ là máy sẽ hiểu kí tự ta nhập vào là khác g nên ko thỏa mãn.
Bạn hiểu sai ý của sách rồi.
Nếu
và bạn input ‘g’ (có enter) ->
c = 'g'
Còn input tab (có enter) ->
c = '\t'
(kí tự tab)Chứ bạn nhập kí tự g thì dấu enter đằng sau đâu có ý nghĩa gì đâu. Enter ở đây là kết thúc việc nhập.
mình đây bạn ơi tên la tiền đây, do hạn chế tin nhắn cho người mới nên vao nick khác
vậy bạn có thể giải thích cho mình tại sao kết thúc được ko ? với lại nếu mình chèn thêm fflush (stdin);
thì sẽ thỏa mãn khi nhập g